在SQL中,GROUP BY子句允许我们根据一个或多个列对数据进行分组并检索聚合结果。然而,在MySQL和PostgreSQL中使用此子句时,可能会遇到不同的行为,从而导致PostgreSQL出现错误“列'the_table.col3'必须出现在GROUP BY子句中或用作聚合函数”。
聚合函数(例如MIN()、MAX()、COUNT()和SUM())使我们能够将多个值组合成单个结果。这些函数通常与GROUP BY子句一起使用,以计算每个组的汇总统计信息。
MySQL允许对GROUP BY规则进行宽松的解释,即使未将非聚合列包含在GROUP BY子句中,也允许它们出现在select列表中。这种行为可能导致不确定的值,因为MySQL可以任意选择每个组的值。
相反,PostgreSQL严格遵守SQL标准。使用GROUP BY子句时,它要求select列表中的所有非聚合列必须包含在GROUP BY子句中,或者用在聚合函数中。
为了解决PostgreSQL中的错误,我们需要使用聚合函数来计算每个分组列的汇总统计信息。例如,我们可以使用以下查询:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
虽然MySQL的方法提供了灵活性,但它可能导致不确定的值。PostgreSQL对SQL标准的严格执行确保聚合结果一致且可预测。在PostgreSQL中使用GROUP BY子句时,最佳实践始终是将非聚合列包含在GROUP BY子句中或使用聚合函数。
以上是MySQL 与 PostgreSQL GROUP BY:为什么出现'必须出现在 GROUP BY 子句中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!