Basé sur la version originale de La réponse de Johan :
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`
La façon dont cette astuce fonctionne est que l'expression country = 'total'
vaut 1 (vrai) si le country
la colonne est égale à 'total'
, et à 0 (faux) sinon. Dans l'ordre numérique croissant, 1 vient après 0. Ainsi, le tri par cette expression force toutes les lignes où le country
la colonne est égale à 'total'
pour trier après toutes les autres colonnes.
De même, trier par les expressions region = 'total'
avant value
force toutes les lignes avec la valeur 'total'
dans leur region
pour trier après toutes les autres lignes avec le même country
, quelle que soit leur value
colonne.
La même astuce fonctionne avec d'autres opérateurs de comparaison
aussi. Par exemple, si vous vouliez forcer les valeurs négatives à trier après les valeurs positives, vous pouvez trier les lignes par `value` < 0, `value`
.