ヨハンの答え :
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`
このトリックが機能する方法は、式country = 'total' countryの場合、1(true)と評価されます 列が'total'に等しい 、それ以外の場合は0(false)にします。番号の昇順では、1は0の後に続きます。したがって、その式で並べ替えると、countryが存在するすべての行が強制されます。 列が'total'に等しい 他の列の後に並べ替えます。
同様に、式region = 'total'で並べ替えます valueの前 値が'total'の行を強制します 彼らのregionで 同じcountryを持つ他の行の後に並べ替える 、valueに関係なく 列。
同じトリックが他の`value` < 0, `value`で並べ替えることができます。 。