📜  PostgreSQL – GROUP BY 子句(1)

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

PostgreSQL – GROUP BY 子句

在 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 子句,可以更加方便地实现各种复杂查询功能。