Basierend auf der Originalversion von Johans Antwort :
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`
Dieser Trick funktioniert so, dass der Ausdruck country = 'total'
ergibt 1 (wahr), wenn country
Spalte ist gleich 'total'
, andernfalls auf 0 (falsch). In aufsteigender numerischer Reihenfolge kommt 1 nach 0. Daher erzwingt die Sortierung nach diesem Ausdruck alle Zeilen, in denen country
steht Spalte ist gleich 'total'
um nach anderen Spalten zu sortieren.
Ebenso die Sortierung nach den Ausdrücken region = 'total'
vor value
erzwingt alle Zeilen mit dem Wert 'total'
in ihrer region
um nach allen anderen Zeilen mit demselben country
zu sortieren , unabhängig von ihrem value
Spalte.
Der gleiche Trick funktioniert mit anderen Vergleichsoperatoren
zu. Wenn Sie zum Beispiel negative Werte erzwingen möchten, um nach positiven Werten zu sortieren, könnten Sie die Zeilen nach `value` < 0, `value`
sortieren .