解碼 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中文網其他相關文章!