首頁 >資料庫 >mysql教程 >為什麼我的 Oracle GROUP BY 查詢回傳「不是 GROUP BY 表達式」錯誤?

為什麼我的 Oracle GROUP BY 查詢回傳「不是 GROUP BY 表達式」錯誤?

Linda Hamilton
Linda Hamilton原創
2025-01-05 17:59:43823瀏覽

Why Does My Oracle GROUP BY Query Return a

不帶聚合函數的GROUP BY

使用不含聚合函數的GROUP BY 時,必須了解Oracle 的操作方式,以避免遇到「不是GROUP BY 表達式」錯誤。

GROUP BY 將指定列具有相同值的行分組,並產生單一結果行。但是,未出現在聚合函數中的欄位必須包含在 GROUP BY 子句中,以識別分組值的唯一組合。

請考慮下表:

EMP
+-------+------+------+
| EmpNo | EName | Sal  |
+-------+------+------+
| 7839   | King  | 5000  |
| 7698   | Blake | 2850  |
| 7782   | Clark | 2450  |
+-------+------+------+

示例1:

SELECT EName, Sal
FROM EMP
GROUP BY EName, Sal

結果:

+------+------+
| EName | Sal  |
+------+------+
| King  | 5000  |
| Blake | 2850  |
| Clark | 2450  |
+------+------+

此查詢正確分組行並傳回自分組列(EName 和Sal)以來的所有行) 匹配。

範例2:

SELECT EName, Sal
FROM EMP
GROUP BY EName

結果:

ORA-00979: not a GROUP BY expression

此查詢失敗,因為Sal 未包含在GROUP BY 子句中。 Oracle 不知道如何聚合同一 EName 具有不同 Sal 值的多行。

範例3:

SELECT EName, Sal
FROM EMP
GROUP BY Sal

結果:

ORA-00979: not a GROUP BY expression

此查詢也失敗,因為EName在GROUP 中BY 條款。 Oracle 需要知道哪個 EName 與每個唯一的 Sal 值關聯。

範例4:

SELECT EmpNo, EName, Sal
FROM EMP
GROUP BY Sal, EName

結果:

ORA-00979: not a GROUP BY expression

此查詢失敗,因為選擇欄位(Emp 、EName、Sal)的數量超過了數量GROUP BY子句中的列數(Sal、EName)。考慮到唯一的組合,Oracle 要求所選列成為分組的一部分。

範例5:

SELECT EmpNo, EName, Sal
FROM EMP
GROUP BY EmpNo, EName, Sal

結果:

+-------+------+------+
| EmpNo | EName | Sal  |
+-------+------+------+
| 7839   | King  | 5000  |
| 7698   | Blake | 2850  |
| 7782   | Clark | 2450  |
+-------+------+------+

此查詢成功,因為所有選定的查詢列都包含在GROUP BY 中條款。 Oracle 考慮 EmpNo、EName 和 Sal 的每個唯一組合,從而產生三個不同的行。

以上是為什麼我的 Oracle GROUP BY 查詢回傳「不是 GROUP BY 表達式」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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