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