PostgreSQL 的 GROUP BY
子句:解决常见错误
PostgreSQL 严格的 GROUP BY
行为经常会导致错误:“列“the_table.col3”必须出现在 GROUP BY 子句中或在聚合函数中使用。” 本文阐明了此行为并提供了解决方案。
理解 SQL 中的聚合函数
聚合函数,例如 MIN
、MAX
、SUM
、COUNT
和 AVG
,汇总组内的数据。它们根据多个输入值生成单个结果。
PostgreSQL GROUP BY
错误解释
当在没有适当聚合函数的情况下使用 GROUP BY
子句时,会出现错误。 该查询尝试根据非聚合列(例如 col2
)对行进行分组,同时选择不属于分组的其他非聚合列(col3
、col1
)。 PostgreSQL 要求所有选定的非聚合列要么位于 GROUP BY
子句中,要么由聚合函数处理。
PostgreSQL 与 MySQL GROUP BY
处理
MySQL 的 GROUP BY
实现不太严格。它可能允许选择 GROUP BY
子句中不存在的非聚合列,但这可能会导致不可预测的值,特别是如果这些列在组内具有不同的值。 此行为不符合标准 SQL。
更正 PostgreSQL GROUP BY
查询
要修复 PostgreSQL 错误,请将聚合函数应用于 SELECT
列表中的所有非聚合列。 例如:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
此修订后的查询可确保准确分组并计算每个组内 col3
和 col1
的最小值。
最佳实践和 SQL 标准
始终将聚合函数与GROUP BY
一起使用,以保证数据一致性和可预测的结果。 这与 SQL92 标准一致,该标准要求 SELECT
列表中的非聚合列必须位于 GROUP BY
子句中或在功能上依赖于分组列。
以上是为什么 PostgreSQL 需要 GROUP BY 或聚合函数中的非聚合列?的详细内容。更多信息请关注PHP中文网其他相关文章!