在 PostgreSQL 进行 GROUP BY 查询时,SELECT 语句中的字段必须符合特定规则,否则会报错。例如:
SELECT name, age, COUNT(*)
FROM user
GROUP BY age, score;
会报错:
ERROR: column "name" must appear in the GROUP BY clause or be used in an aggregate function
这个错误在 MySQL 5.7 及之前版本不会出现,但在 PostgreSQL 和 MySQL 8.0 以后,都会受到 ONLY_FULL_GROUP_BY 规则的约束。
在 PostgreSQL 中,SELECT 语句中的字段必须满足以下条件之一:
GROUP BY 里(即作为分组条件)MIN(name)、MAX(name)、STRING_AGG(name, ', '))你的 GROUP BY 语句只包含 age, score,但 name 既没有出现在 GROUP BY 中,也没有使用聚合函数,因此 PostgreSQL 无法确定 name 应该如何计算,从而报错。
根据实际需求,提供三种解决方案:
1️⃣ 将 name 加入 GROUP BY
SELECT name, age, COUNT(*)
FROM user
GROUP BY name, age, score;
📌 适用于 name 需要影响分组的情况,但如果 name 存在多个不同值,会导致分组变细,影响统计结果。