📅  最后修改于: 2023-12-03 14:44:29.630000             🧑  作者: Mango
在MySQL中,可以使用GROUP BY
语句将查询结果分组,并且可以使用COUNT
、SUM
、AVG
等聚合函数对每个组进行计算。但是,当我们需要将同一个表多次加入到GROUP BY子句中时,就需要使用不同的表别名来区分它们,否则就会出现语法错误。
SELECT column1, column2, COUNT(column3), SUM(column4)
FROM table AS alias1, table AS alias2
WHERE condition
GROUP BY column1, column2
在FROM
子句中使用了同一个表table
两次,分别用别名alias1
和alias2
来区分它们。在SELECT
子句中可以使用alias1.column
和alias2.column
来指定不同的列,而在GROUP BY
子句中可以使用alias1.column
和alias2.column
来对每个组进行分组计算。
假设有以下订单表orders
:
| order_id | customer_id | order_date | total_amount | | -------- | ----------- | ---------- | ------------ | | 1 | 1001 | 2022-01-01 | 100 | | 2 | 1002 | 2022-01-02 | 200 | | 3 | 1001 | 2022-01-03 | 300 | | 4 | 1002 | 2022-01-04 | 400 | | 5 | 1001 | 2022-01-05 | 500 |
现在需要查询每个顾客的订单数和总金额,可以使用以下SQL语句:
SELECT customer_id, COUNT(order_id), SUM(total_amount)
FROM orders AS o1, orders AS o2
WHERE o1.customer_id = o2.customer_id
GROUP BY o1.customer_id
这里使用了两次orders
表来实现对每个顾客的订单数和总金额的统计。WHERE
子句中的条件o1.customer_id = o2.customer_id
实现了两次表之间的关联,而在GROUP BY
子句中使用了o1.customer_id
对顾客进行分组计算。执行结果如下:
| customer_id | COUNT(order_id) | SUM(total_amount) | | ----------- | --------------- | ----------------- | | 1001 | 3 | 900 | | 1002 | 2 | 600 |
可以看到,使用多次加入同一个表的GROUP BY
语句可以方便地进行复杂的统计计算。