首页 > 数据库 > mysql教程 > 为什么 PostgreSQL 需要 GROUP BY 或聚合函数中的非聚合列?

为什么 PostgreSQL 需要 GROUP BY 或聚合函数中的非聚合列?

Barbara Streisand
发布: 2025-01-18 09:46:38
原创
700 人浏览过

Why Does PostgreSQL Require Non-Aggregated Columns in GROUP BY or Aggregate Functions?

PostgreSQL 的 GROUP BY 子句:解决常见错误

PostgreSQL 严格的 GROUP BY 行为经常会导致错误:“列“the_table.col3”必须出现在 GROUP BY 子句中或在聚合函数中使用。” 本文阐明了此行为并提供了解决方案。

理解 SQL 中的聚合函数

聚合函数,例如 MINMAXSUMCOUNTAVG,汇总组内的数据。它们根据多个输入值生成单个结果。

PostgreSQL GROUP BY 错误解释

当在没有适当聚合函数的情况下使用 GROUP BY 子句时,会出现错误。 该查询尝试根据非聚合列(例如 col2)对行进行分组,同时选择不属于分组的其他非聚合列(col3col1)。 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>
登录后复制

此修订后的查询可确保准确分组并计算每个组内 col3col1 的最小值。

最佳实践和 SQL 标准

始终将聚合函数与GROUP BY一起使用,以保证数据一致性和可预测的结果。 这与 SQL92 标准一致,该标准要求 SELECT 列表中的非聚合列必须位于 GROUP BY 子句中或在功能上依赖于分组列。

以上是为什么 PostgreSQL 需要 GROUP BY 或聚合函数中的非聚合列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板