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`
.