Dựa trên phiên bản gốc của Câu trả lời của 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`
Cách thức hoạt động của thủ thuật này là biểu thức country = 'total'
đánh giá là 1 (true) nếu country
cột bằng 'total'
, và thành 0 (false) nếu không. Theo thứ tự số tăng dần, 1 đứng sau 0. Do đó, việc sắp xếp theo biểu thức đó buộc bất kỳ hàng nào có country
cột bằng 'total'
để sắp xếp sau bất kỳ cột nào khác.
Tương tự, sắp xếp theo các biểu thức region = 'total'
trước giá trị value
buộc bất kỳ hàng nào có giá trị 'total'
trong region
của họ để sắp xếp sau bất kỳ hàng nào khác có cùng country
, bất kể giá trị value
của chúng là bao nhiêu cột.
Thủ thuật tương tự cũng hoạt động với toán tử so sánh
khác quá. Ví dụ:nếu bạn muốn buộc các giá trị âm sắp xếp sau các giá trị dương, bạn có thể sắp xếp các hàng theo `value` < 0, `value`
.