首頁 >資料庫 >mysql教程 >如何解決 ORA-00979:SQL 查詢中的分組列?

如何解決 ORA-00979:SQL 查詢中的分組列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-24 04:52:09726瀏覽

How to Resolve ORA-00979: Grouping Columns in SQL Queries?

瞭解並解決 SQL 查詢中的 ORA-00979

當 SQL 查詢錯誤地使用 GROUP BY 子句時,會出現 ORA-00979 錯誤「不是 GROUP BY 表達式」。 當 SELECT 語句包含 GROUP BY 子句中未提及的列,或在列上使用聚合函數而不進行分組時,就會發生這種情況。

GROUP BY 子句對指定列中具有相同值的行進行分組,允許聚合函數(如SUMAVGMINMAXCOUNT)來匯總每個組內的數據。 如果沒有正確的分組,資料庫無法確定哪些值與每個組關聯,導致錯誤。

範例與解:

導致此錯誤的常見情況涉及選擇多個列,但僅按子集進行分組。 資料庫無法確定每個組中未分組列的單一值。

要解決此問題,可以:

  1. GROUP BY 子句中包含所有非聚合列:如果您想查看所選列的所有唯一組合,這是最簡單的解決方案。

  2. 對非分組列使用聚合函數:如果您只需要某些列的總統計,請將聚合函數(如MINMAXAVG)套用到這些列。 這會將輸出減少為每組一行。

讓我們用一個更正後的查詢來說明:

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

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