首頁 >資料庫 >mysql教程 >為什麼我的 SQL 查詢產生 ORA-00979:不是 GROUP BY 表達式?

為什麼我的 SQL 查詢產生 ORA-00979:不是 GROUP BY 表達式?

DDD
DDD原創
2025-01-24 04:32:09521瀏覽

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

錯誤查詢:

<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>

這將失敗並出現 ORA-00979,因為 appt_idpatient 未分組。

正確方法

  • 包含 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn