解码 SQL 的 GROUP BY 子句中的 ORA-00979 错误
当您的查询使用 GROUP BY
但在 SELECT
列表中包含未分组或聚合的列时,就会出现这种常见的 SQL 错误 ORA-00979(“不是 GROUP BY 表达式”)。 让我们探讨一下如何解决这个问题。
核心问题在于SELECT
和GROUP BY
子句不匹配。 GROUP BY
将具有匹配值的行合并到组中。 SELECT
语句中的每一列必须:
GROUP BY
子句中: 这确保每个选定的值都直接与一个组关联。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 |
错误查询:
<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>
这将失败并出现 ORA-00979,因为 appt_id
和 patient
未分组。
正确方法
GROUP BY
中的所有非聚合列:<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>
这计算每位医生的预约。
<code class="language-sql">SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;</code>
这会计算预约并找到每个医生的最小预约 ID。
关键是要保证分组标准和所选数据之间的关系一致。 使用聚合函数可以汇总组内的数据,避免 ORA-00979 错误。
以上是为什么我的 SQL 查询生成 ORA-00979:不是 GROUP BY 表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!