📜  SQL GROUP BY(1)

📅  最后修改于: 2023-12-03 15:05:17.177000             🧑  作者: Mango

SQL GROUP BY

GROUP BY 子句用于将数据按给定列进行分组。通常,我们使用 GROUP BY 和聚合函数(如 SUMAVGMINMAXCOUNT 等)一起使用来计算分组的结果。

语法
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 子句中。
参考文献