📅  最后修改于: 2023-12-03 15:05:17.177000             🧑  作者: Mango
GROUP BY
子句用于将数据按给定列进行分组。通常,我们使用 GROUP BY
和聚合函数(如 SUM
、AVG
、MIN
、MAX
、COUNT
等)一起使用来计算分组的结果。
SELECT column1, column2, ... , aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column1, column2, ...;
例如,下面这个示例中的 orders
表包含了一些订单。
| id | order_date | customer_id | amount | | :---: | :-------- | :--------: | :----: | | 1 | 2021-01-01 | 1 | 100 | | 2 | 2021-01-01 | 2 | 200 | | 3 | 2021-01-02 | 1 | 150 | | 4 | 2021-01-03 | 3 | 300 | | 5 | 2021-01-03 | 2 | 250 |
我们可以使用下面的查询语句来计算每个客户的订单总金额:
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;
输出:
| customer_id | total_amount | | :------------: | :---------------: | | 1 | 250 | | 2 | 450 | | 3 | 300 |
同时,我们可以使用下面的查询语句来计算每个客户在每个月的订单总金额:
SELECT customer_id, MONTH(order_date) AS month, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id, MONTH(order_date);
输出:
| customer_id | month | total_amount | | :------------: | :-----: | :---------------: | | 1 | 1 | 100 | | 1 | 2 | 150 | | 2 | 1 | 200 | | 2 | 3 | 250 | | 3 | 1 | 300 |
GROUP BY
子句必须位于 SELECT
子句之后。GROUP BY
子句中可以使用的列(除了聚合函数的列)必须出现在 SELECT
子句中。GROUP BY
子句中可以使用的列,如果该列出现在 WHERE
子句中,则 GROUP BY
子句中应该也出现该列。SELECT
子句中出现的列,如果该列不是聚合函数的列,也不是 GROUP BY
子句中出现的列,则该列应该包含在 GROUP BY
子句中。