PostgreSQL GROUP BY 错误详解
在 PostgreSQL 中使用 GROUP BY
子句查询数据库表时,所有包含在 SELECT
列表中但未进行聚合的列都必须出现在 GROUP BY
子句中,或者用作聚合函数的参数。 当尝试按特定列(例如 col2
)分组,但 SELECT
语句中包含其他未进行聚合的列(例如 col3
和 col1
)时,就会出现此错误。
聚合函数
聚合函数允许我们汇总多行数据。常见的聚合函数包括:
COUNT
(计算记录数)SUM
(计算列的总和)MIN
(查找最小值)MAX
(查找最大值)AVG
(计算平均值)MySQL 与 PostgreSQL 的 GROUP BY 处理差异
MySQL 对 GROUP BY
子句的处理方式与 PostgreSQL 不同。在 MySQL 中,即使 SELECT
列表中包含未出现在 GROUP BY
子句中的未聚合列,也仍然允许。但是,这些列返回的值在记录之间可能任意变化,从而导致潜在的不一致性。
相比之下,PostgreSQL 严格遵守 SQL 标准,要求未聚合的列必须包含在 GROUP BY
子句中,或者用作聚合函数的参数。
解决方法
要解决 PostgreSQL 中的此错误,请重写查询以对未聚合的列使用聚合函数。例如:
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
此查询使用 MIN
聚合函数来检索由 col2
定义的每个组中 col3
和 col1
的最小值。
通过使用聚合函数,查询确保返回的值一致,并符合 PostgreSQL GROUP BY
子句的要求。
以上是为什么我的带有 GROUP BY 子句的 PostgreSQL 查询会抛出错误?的详细内容。更多信息请关注PHP中文网其他相关文章!