MySQL中的WITH ROLLUP選項可以在GROUP BY子句后使用,用于生成額外的匯總行。這些匯總行顯示了每個組的匯總信息,以及所有組的總和。ROLLUP會按照從具體分組到總分的順序生成這些匯總行。
在使用WITH ROLLUP時,輸出的每一行都包含一個額外的字段,表示該行的匯總級別。這些級別從具體分組到總分的順序是:具體分組、所有分組的匯總、所有組的總和。
輸出格式的每一列的含義取決于SELECT子句中包含的列以及是否有聚合函數(如COUNT、SUM、AVG等)。如果沒有聚合函數,那么每一列將顯示每個分組的具體值。如果有聚合函數,那么每一列將顯示該列的匯總值。
以下是一個使用WITH ROLLUP的示例查詢:
SELECT customer_id, COUNT(*) AS num_orders, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
WITH ROLLUP;
假設orders表包含以下數據:
+-------------+----------+------------+
| customer_id | order_id | amount |
+-------------+----------+------------+
| 1 | 1 | 100.00 |
| 1 | 2 | 200.00 |
| 2 | 3 | 300.00 |
| 2 | 4 | 400.00 |
| 3 | 5 | 500.00 |
+-------------+----------+------------+
上述查詢的輸出將是:
+-------------+-----------+------------+------------------+
| customer_id | num_orders| total_amount| (null) |
+-------------+-----------+------------+------------------+
| 1 | 2 | 300.00 | NULL |
| 2 | 2 | 700.00 | NULL |
| 3 | 1 | 500.00 | NULL |
| NULL | 5 | 1500.00 | NULL |
+-------------+-----------+------------+------------------+
在這個例子中,(null)表示該行是對應于上一級別的匯總行。例如,第一行(customer_id=1, num_orders=2, total_amount=300.00)是對應于customer_id=1的分組的匯總行,而最后一行((null), num_orders=5, total_amount=1500.00)是所有分組的匯總行。