ROLLUP và ORDER BY là loại trừ lẫn nhau (mutually exclusive) trong MySQL, không nên dùng cùng lúc. Nếu dùng cả hai, hàng tóm tắt (summary rows) sẽ bị sắp xếp lẫn cùng các hàng dữ liệu.
Vị trí hàng tóm tắt phụ thuộc thứ tự sắp xếp:
- ASC (tăng dần): Hàng tóm tắt ở đầu
- DESC (giảm dần): Hàng tóm tắt ở cuối
Ví dụ
mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr DESC; +------+-------+ | sr | PRICE | +------+-------+ | 5 | 250 | | 4 | 850 | | 3 | 1005 | | 2 | 630 | | 1 | 502 | | NULL | 3237 | -- Tổng ở cuối (DESC) +------+-------+ mysql> Select * from (Select sr, SUM(PRICE) AS PRICE from ratelist GROUP BY sr WITH ROLLUP) AS Price ORDER BY Sr ASC; +------+-------+ | sr | PRICE | +------+-------+ | NULL | 3237 | -- Tổng ở đầu (ASC) | 1 | 502 | | 2 | 630 | | 3 | 1005 | | 4 | 850 | | 5 | 250 | +------+-------+
Khuyến nghị: Không dùng ORDER BY trực tiếp với WITH ROLLUP. Nếu cần sắp xếp, bọc trong subquery như ví dụ.