在 PostgreSQL 中,GROUP BY 子句用于将结果集中的行分组,以便对每个组应用聚合函数。以下是详细解读:
基本用法
GROUP BY 子句通常与聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等)一起使用。它按照一个或多个列对数据进行分组,然后对每个组计算聚合值。
语法示例
SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2;
详细说明
-
选择列:
- 在
SELECT子句中,除了聚合函数外,所有列都必须出现在GROUP BY子句中。
- 在
-
聚合函数:
- 对每个组应用聚合函数,计算出汇总信息。
-
条件过滤:
- 可以使用
WHERE子句在分组前过滤数据。
- 可以使用
-
分组列:
-
GROUP BY后面列出的列用于确定分组的基础。具有相同值的行被分为一组。
-
-
排序结果:
- 可以使用
ORDER BY子句对分组结果进行排序。
- 可以使用
示例
假设有一个销售表 sales:
| id | product_id | quantity | price |
|---|---|---|---|
| 1 | 101 | 2 | 20 |
| 2 | 102 | 1 | 50 |
| 3 | 101 | 3 | 20 |
| 4 | 103 | 5 | 30 |
你想计算每种产品的总销售量:
SELECT product_id, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_id;
结果:
| product_id | total_quantity |
|---|---|
| 101 | 5 |
| 102 | 1 |
| 103 | 5 |
注意事项
-
必须包含在
GROUP BY中:在SELECT中的所有非聚合列都必须出现在GROUP BY中。 -
顺序:
GROUP BY不需要与SELECT中的列顺序匹配。 -
NULL 处理:
GROUP BY会将NULL视为一个独立的组。
通过使用 GROUP BY,可以有效地对数据进行分组和聚合,从而获得更有意义的统计信息。













网友评论