Gebaseerd op de originele versie van Johans antwoord :
SELECT *
FROM (
SELECT
COALESCE(country, 'total') AS country,
COALESCE(region, 'total' ) AS region,
SUM(`value`) as `value`,
FROM `table`
GROUP BY country, region WITH ROLLUP
) t
ORDER BY country = 'total', country, region = 'total', `value`
De manier waarop deze truc werkt, is dat de uitdrukking country = 'total'
evalueert tot 1 (true) als het country
kolom is gelijk aan 'total'
, en anders naar 0 (false). In oplopende numerieke volgorde komt 1 na 0. Sorteren op die uitdrukking dwingt dus alle rijen af waar het country
kolom is gelijk aan 'total'
om te sorteren na andere kolommen.
Evenzo sorteren op de uitdrukkingen region = 'total'
voor value
forceert alle rijen met de waarde 'total'
in hun region
om te sorteren op andere rijen met hetzelfde country
, ongeacht hun value
kolom.
Dezelfde truc werkt met andere vergelijkingsoperators
te. Als u bijvoorbeeld wilt dat negatieve waarden worden gesorteerd op positieve waarden, kunt u de rijen sorteren op `value` < 0, `value`
.