Na základě původní verze Johanova odpověď :
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`
Tento trik funguje tak, že výraz country = 'total'
vyhodnotí se jako 1 (pravda), pokud country
sloupec se rovná 'total'
a na 0 (nepravda) jinak. Ve vzestupném číselném pořadí následuje 1 za 0. Seřazení podle tohoto výrazu tedy vynutí všechny řádky, kde je country
sloupec se rovná 'total'
seřadit podle jiných sloupců.
Podobně řazení podle výrazů region = 'total'
před value
vynutí všechny řádky s hodnotou 'total'
v jejich region
seřadit podle jiných řádků se stejnou country
, bez ohledu na jejich value
sloupec.
Stejný trik funguje s dalšími operátory porovnání
také. Pokud byste například chtěli vynutit řazení záporných hodnot po kladných hodnotách, můžete řádky seřadit podle `value` < 0, `value`
.