首页 > 数据库 > mysql教程 > 为什么我的 SQL 查询生成 ORA-00979:不是 GROUP BY 表达式?

为什么我的 SQL 查询生成 ORA-00979:不是 GROUP BY 表达式?

DDD
发布: 2025-01-24 04:32:09
原创
585 人浏览过

Why Does My SQL Query Generate ORA-00979: Not a GROUP BY Expression?

解码 SQL 的 GROUP BY 子句中的 ORA-00979 错误

当您的查询使用 GROUP BY 但在 SELECT 列表中包含未分组或聚合的列时,就会出现这种常见的 SQL 错误 ORA-00979(“不是 GROUP BY 表达式”)。 让我们探讨一下如何解决这个问题。

核心问题在于SELECTGROUP BY子句不匹配。 GROUP BY 将具有匹配值的行合并到组中。 SELECT 语句中的每一列必须:

  1. 出现在 GROUP BY 子句中: 这确保每个选定的值都直接与一个组关联。
  2. 聚合: 使用 MIN()MAX()SUM()AVG()COUNT() 等函数来汇总每个组内的值。

说明性示例

想象一张有约会的桌子:

Appointment ID (appt_id) Patient Name (patient) Doctor (doctor)
1 Alice Dr. Smith
2 Bob Dr. Smith
3 Charlie Dr. Jones

错误查询:

SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;
登录后复制

这将失败并出现 ORA-00979,因为 appt_idpatient 未分组。

正确方法

  • 包含 GROUP BY 中的所有非聚合列:
SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;
登录后复制

这计算每位医生的预约。

  • 使用聚合函数:
SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;
登录后复制

这会计算预约并找到每​​个医生的最小预约 ID。

关键是要保证分组标准和所选数据之间的关系一致。 使用聚合函数可以汇总组内的数据,避免 ORA-00979 错误。

以上是为什么我的 SQL 查询生成 ORA-00979:不是 GROUP BY 表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

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