首页 > 数据库 > mysql教程 > 如何解决 SQL 查询中的 ORA-00979'不是 GROUP BY 表达式”错误?

如何解决 SQL 查询中的 ORA-00979'不是 GROUP BY 表达式”错误?

Patricia Arquette
发布: 2025-01-24 04:41:08
原创
485 人浏览过

How to Resolve the ORA-00979

ORA-00979:不是 GROUP BY 表达式

ORA-00979 错误表示 SQL 查询的 SELECT 列表和 GROUP BY 子句之间不匹配。 当 SELECT 语句包含 GROUP BY 子句中不存在的列,并且这些列未使用 SUMAVGMINMAXCOUNT 等函数聚合时,通常会发生这种情况等等

场景:

您的查询可能涉及多个表(例如,reviewcsfact),并且 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>
登录后复制

解决方案:

要解决此问题,可以:

  1. 将缺少的列添加到 GROUP BY 子句中: 包括 SELECT 列表中未聚合在 GROUP BY 子句中的每一列。

  2. 聚合缺失的列: 使用聚合函数(例如 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中文网其他相关文章!

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