Въз основа на оригиналната версия на Отговорът на Йохан :
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`
Начинът, по който работи този трик, е изразът country = 'total'
оценява на 1 (истина), ако country
колоната е равна на 'total'
, и до 0 (false) в противен случай. Във възходящ числов ред 1 идва след 0. Така сортирането по този израз принуждава всички редове, където country
колоната е равна на 'total'
за сортиране след всякакви други колони.
По същия начин, сортиране по изразите region = 'total'
преди value
принуждава всички редове със стойност 'total'
в техния region
за сортиране след всички други редове със същата country
, независимо от тяхната value
колона.
Същият трик работи с други оператори за сравнение
също. Например, ако искате да принудите отрицателните стойности да се сортират след положителни стойности, можете да сортирате редовете по `value` < 0, `value`
.