MySQL PostgreSQL GROUP BY 的不同

MySQL PostgreSQL GROUP BY 的不同

MySQLPostgreSQL 都是流行的关系型数据库管理系统。虽然它们都支持 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

我们可以使用以下查询查找每个部门的年龄总和:

SELECT department, SUM(age) FROM employee GROUP BY department;
SQL

这将返回以下结果:

department SUM(age)
Sales 65
Marketing 65

注意,在 SELECT 列表中,我们只指定了 department 和 SUM(age)。MySQL 自动为我们聚合了其他列。

PostgreSQL GROUP BY

PostgreSQL 中,如果未在 SELECT 列表中显式地指定某个聚合函数(如 SUM,COUNT,AVG 等),则不能在 GROUP BY 子句中引用该列。例如,以下查询将在 PostgreSQL 中失败:

SELECT department, age FROM employee GROUP BY department;
SQL

因为我们未指定 age 的聚合函数,也未在 GROUP BY 子句中包括它。在 PostgreSQL 中,这个查询可以修正为以下形式:

SELECT department, MAX(age) FROM employee GROUP BY department;
SQL

或者,我们可以在 SELECT 列表中指定每个列的聚合函数:

SELECT department, SUM(age) FROM employee GROUP BY department;
SQL

总结

MySQL 和 PostgreSQL 在 GROUP BY 子句的处理上存在一些不同。在 MySQL 中,未在 SELECT 列表中指定的列会自动聚合,但在 PostgreSQL 中必须显式指定聚合函数,否则查询将失败。了解这些不同之处可以帮助您更好地处理不同数据库管理系统之间的差异。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册