Com base na versão original de Resposta 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`
A maneira como esse truque funciona é que a expressão
country = 'total'
avalia como 1 (verdadeiro) se o country
coluna é igual a 'total'
, e para 0 (falso) caso contrário. Em ordem numérica crescente, 1 vem depois de 0. Assim, classificar por essa expressão força todas as linhas em que o country
coluna é igual a 'total'
para classificar após quaisquer outras colunas. Da mesma forma, ordenando pelas expressões
region = 'total'
antes de value
força qualquer linha com o valor 'total'
em sua region
para classificar após quaisquer outras linhas com o mesmo country
, independentemente de seu value
coluna. O mesmo truque funciona com outros operadores de comparação também. Por exemplo, se você quisesse forçar valores negativos a serem classificados após valores positivos, você poderia classificar as linhas por
`value` < 0, `value`
.