MySQL PostgreSQL GROUP BY 的不同
MySQL 和 PostgreSQL 都是流行的关系型数据库管理系统。虽然它们都支持 SQL 语言,但是在 GROUP BY 子句方面存在一些不同之处。
阅读更多:MySQL 教程
MySQL GROUP BY
在 MySQL 中,默认情况下,当使用 GROUP BY 子句时,未在 SELECT 列表中出现的任何列都将被隐式地聚合为该组的第一个匹配行的值。例如,考虑以下 employee 表:
id | name | age | department |
---|---|---|---|
1 | John | 30 | Sales |
2 | Jane | 25 | Marketing |
3 | Tom | 35 | Sales |
4 | Bill | 40 | Marketing |
我们可以使用以下查询查找每个部门的年龄总和:
这将返回以下结果:
department | SUM(age) |
---|---|
Sales | 65 |
Marketing | 65 |
注意,在 SELECT 列表中,我们只指定了 department 和 SUM(age)。MySQL 自动为我们聚合了其他列。
PostgreSQL GROUP BY
在 PostgreSQL 中,如果未在 SELECT 列表中显式地指定某个聚合函数(如 SUM,COUNT,AVG 等),则不能在 GROUP BY 子句中引用该列。例如,以下查询将在 PostgreSQL 中失败:
因为我们未指定 age 的聚合函数,也未在 GROUP BY 子句中包括它。在 PostgreSQL 中,这个查询可以修正为以下形式:
或者,我们可以在 SELECT 列表中指定每个列的聚合函数:
总结
MySQL 和 PostgreSQL 在 GROUP BY 子句的处理上存在一些不同。在 MySQL 中,未在 SELECT 列表中指定的列会自动聚合,但在 PostgreSQL 中必须显式指定聚合函数,否则查询将失败。了解这些不同之处可以帮助您更好地处理不同数据库管理系统之间的差异。