📜  mysql 多次加入同一个表 group by - SQL (1)

📅  最后修改于: 2023-12-03 14:44:29.630000             🧑  作者: Mango

MySQL多次加入同一个表的Group By

在MySQL中,可以使用GROUP BY语句将查询结果分组,并且可以使用COUNTSUMAVG等聚合函数对每个组进行计算。但是,当我们需要将同一个表多次加入到GROUP BY子句中时,就需要使用不同的表别名来区分它们,否则就会出现语法错误。

语法
SELECT column1, column2, COUNT(column3), SUM(column4)
FROM table AS alias1, table AS alias2
WHERE condition
GROUP BY column1, column2

FROM子句中使用了同一个表table两次,分别用别名alias1alias2来区分它们。在SELECT子句中可以使用alias1.columnalias2.column来指定不同的列,而在GROUP BY子句中可以使用alias1.columnalias2.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语句可以方便地进行复杂的统计计算。