ORA-00979:不是 GROUP BY 表达式
ORA-00979 错误表示 SQL 查询的 SELECT
列表和 GROUP BY
子句之间不匹配。 当 SELECT
语句包含 GROUP BY
子句中不存在的列,并且这些列未使用 SUM
、AVG
、MIN
、MAX
、COUNT
等函数聚合时,通常会发生这种情况等等
场景:
您的查询可能涉及多个表(例如,review
、cs
、fact
),并且 GROUP BY
子句不包含 SELECT
列表中的所有非聚合列。 例如:
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cf.some_other_column -- Problem: cf.some_other_column is missing from GROUP BY FROM review cr JOIN cs ON ... JOIN fact cf ON ... GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number;</code>
解决方案:
要解决此问题,可以:
将缺少的列添加到 GROUP BY
子句中: 包括 SELECT
列表中未聚合在 GROUP BY
子句中的每一列。
聚合缺失的列: 使用聚合函数(例如 SUM(cf.some_other_column)
)来汇总该列的值。
其他注意事项:
非等式连接: 即使所有 SELECT
列都在 GROUP BY
中,非等式连接(例如 t1.id > t2.id
)也可能会出现错误。 这会创建重复的行,违反 GROUP BY
原则。 修改连接条件或使用子查询来消除重复项。
理解 GROUP BY
: GROUP BY
子句对指定列中具有相同值的行进行分组,允许聚合函数对每个组进行操作。 如果没有正确的分组,数据库无法确定非聚合列的单个值。
通过确保 SELECT
列表中的每一列都在 GROUP BY
子句中或已聚合,您可以解决 ORA-00979 错误并获得一致的查询结果。
以上是如何解决 SQL 查询中的 ORA-00979'不是 GROUP BY 表达式”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!