瞭解並解決 SQL 查詢中的 ORA-00979
當 SQL 查詢錯誤地使用 GROUP BY
子句時,會出現 ORA-00979 錯誤「不是 GROUP BY 表達式」。 當 SELECT
語句包含 GROUP BY
子句中未提及的列,或在列上使用聚合函數而不進行分組時,就會發生這種情況。
GROUP BY
子句對指定列中具有相同值的行進行分組,允許聚合函數(如SUM
、AVG
、MIN
、MAX
、COUNT
)來匯總每個組內的數據。 如果沒有正確的分組,資料庫無法確定哪些值與每個組關聯,導致錯誤。
範例與解:
導致此錯誤的常見情況涉及選擇多個列,但僅按子集進行分組。 資料庫無法確定每個組中未分組列的單一值。
要解決此問題,可以:
在 GROUP BY
子句中包含所有非聚合列:如果您想查看所選列的所有唯一組合,這是最簡單的解決方案。
對非分組列使用聚合函數:如果您只需要某些列的總統計,請將聚合函數(如MIN
、MAX
或AVG
)套用到這些列。 這會將輸出減少為每組一行。
讓我們用一個更正後的查詢來說明:
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, MIN(TO_CHAR(cf.fact_date, 'mm/dd/yyyy')) AS appt, -- Using MIN to aggregate the date cs.cs_id, cr.tracking_number FROM review cr, cs, fact cf WHERE cr.cs_sk = cs.cs_sk AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.review_sk = cf.review_wk (+) AND cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cr.full_name, cs.cs_id, cr.tracking_number -- All non-aggregated columns are now included ORDER BY cs.cs_id, cr.full_name;</code>
透過在 GROUP BY
子句中正確包含所有非聚合列,查詢將在執行時不會出現 ORA-00979 錯誤,從而確保資料完整性並提供預期結果。 請記住選擇最適合您的資料分析需求的方法(包括所有列或使用聚合函數)。
以上是如何解決 ORA-00979:SQL 查詢中的分組列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!