Basato sulla versione originale di Risposta di Giovanni :
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`
Il modo in cui funziona questo trucco è che l'espressione country = 'total' restituisce 1 (true) se il country la colonna è uguale a 'total' , e in caso contrario a 0 (falso). In ordine numerico crescente, 1 viene dopo 0. Pertanto, l'ordinamento in base a tale espressione forza tutte le righe in cui il country la colonna è uguale a 'total' per ordinare dopo qualsiasi altra colonna.
Allo stesso modo, ordinando in base alle espressioni region = 'total' prima del value forza tutte le righe con il valore 'total' nella loro region per ordinare dopo qualsiasi altra riga con lo stesso country , indipendentemente dal loro value colonna.
Lo stesso trucco funziona con altri operatori di confronto
anche. Ad esempio, se desideri forzare l'ordinamento dei valori negativi dopo i valori positivi, puoi ordinare le righe per `value` < 0, `value` .