📅  最后修改于: 2023-12-03 15:03:49.315000             🧑  作者: Mango
在 PostgreSQL 中,GROUP BY 子句用于将相同属性值的行分组并计算合计,以使查询结果更加有用。下面是 GROUP BY 子句的语法:
SELECT column1, column2, ... columnN, aggregate_function(columnX)
FROM table_name
WHERE [condition]
GROUP BY column1, column2, ... columnN;
column1, column2, ... columnN
: 需要查询的列名。aggregate_function(columnX)
:可以为 COUNT、SUM、AVG、MIN、MAX 等一项聚合函数。它指定了要对哪个列进行计算。FROM table_name
:查询的表名。WHERE [condition]
: 可以选填的 WHERE 语句,它用来限制查询结果。举个例子,我们有一个名为 employees 的表,其中包含员工的工资和所在城市:
id | name | salary | city
----+--------+--------+--------
1 | Tom | 50000 | London
2 | Jerry | 45000 | London
3 | Bob | 60000 | New York
4 | Alice | 55000 | New York
5 | John | 70000 | Paris
如果我们想知道每个城市的平均工资,我们可以使用以下查询:
SELECT city, AVG(salary)
FROM employees
GROUP BY city;
上述查询将返回以下结果:
city | avg
--------+---------
London | 47500.0
New York| 57500.0
Paris | 70000.0
我们还可以通过在 GROUP BY 子句中使用多列来进一步细化分组,例如:
SELECT city, name, AVG(salary)
FROM employees
GROUP BY city, name;
这将返回以下结果:
city | name | avg
--------+-------+---------
London | Tom | 50000.0
London | Jerry | 45000.0
New York| Bob | 60000.0
New York| Alice | 55000.0
Paris | John | 70000.0
在 GROUP BY 子句中,还可以使用 HAVING 子句,它用于筛选出 GROUP BY 子句聚合后的行。例如:
SELECT city, AVG(salary)
FROM employees
GROUP BY city
HAVING AVG(salary) > 55000;
上述查询将返回以下结果:
city | avg
--------+---------
New York| 57500.0
Paris | 70000.0
总之,GROUP BY 子句对于聚合查询如计算平均值、求和或者统计个数等十分有用。灵活运用 GROUP BY 子句,可以更加方便地实现各种复杂查询功能。