Baseret på den originale version af 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`
Måden dette trick fungerer på er, at udtrykket country = 'total'
evalueres til 1 (sand), hvis country
kolonne er lig med 'total'
, og til 0 (falsk) ellers. I stigende numerisk rækkefølge kommer 1 efter 0. Sortering efter det udtryk tvinger således alle rækker, hvor country
kolonne er lig med 'total'
for at sortere efter eventuelle andre kolonner.
På samme måde sorteres efter udtrykkene region = 'total'
før value
tvinger alle rækker med værdien 'total'
i deres region
at sortere efter andre rækker med det samme country
, uanset deres value
kolonne.
Det samme trick fungerer med andre sammenligningsoperatorer
også. Hvis du f.eks. vil tvinge negative værdier til at sortere efter positive værdier, kan du sortere rækkerne efter `value` < 0, `value`
.