首頁 >資料庫 >mysql教程 >如何解決 SQL 查詢中的 ORA-00979「不是 GROUP BY 表達式」錯誤?

如何解決 SQL 查詢中的 ORA-00979「不是 GROUP BY 表達式」錯誤?

Patricia Arquette
Patricia Arquette原創
2025-01-24 04:41:08453瀏覽

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

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