ヨハンの答え :
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`
で並べ替えることができます。 。