ORA-00979:不是 GROUP BY 表達式
ORA-00979 錯誤表示 SQL 查詢的 SELECT
清單和 GROUP BY
子句之間不符。 當SELECT
語句包含GROUP BY
子句中不存在的列,且這些列未使用SUM
、AVG
、MIN
、MAX
、COUNT
等函數聚合時,通常會發生這種情況等等
場景:
您的查詢可能涉及多個資料表(例如,review
、cs
、fact
),且 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>
解:
要解決此問題,可以:
將缺少的欄位加入 GROUP BY
子句中: 包含 SELECT
清單中未聚合在 GROUP BY
子句中的每一列。
聚合缺少的欄位: 使用聚合函數(例如 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中文網其他相關文章!