Baserat på originalversionen av Johans svar :
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`
Sättet det här tricket fungerar på är att uttrycket country = 'total'
evalueras till 1 (true) om country
kolumn är lika med 'total'
, och till 0 (falskt) annars. I stigande numerisk ordning kommer 1 efter 0. Sortering efter det uttrycket tvingar alltså fram alla rader där country
kolumn är lika med 'total'
för att sortera efter andra kolumner.
På samma sätt, sortering efter uttrycken region = 'total'
före value
tvingar fram alla rader med värdet 'total'
i deras region
för att sortera efter andra rader med samma country
, oavsett deras value
kolumn.
Samma knep fungerar med andra jämförelseoperatorer
för. Om du till exempel vill tvinga negativa värden att sortera efter positiva värden kan du sortera raderna efter `value` < 0, `value`
.