不使用聚合函數的Group By:了解機制
GROUP BY 是一個強大的SQL 子句,它允許我們基於以下條件子句將資料分組並彙總:指定的列。雖然 SUM、COUNT 和 AVG 等聚合函數通常與 GROUP BY 一起使用,但也可以在不使用聚合函數的情況下使用 GROUP BY。理解這個概念對於充分利用 GROUP BY 的功能至關重要。
在不使用聚合函數的情況下使用 GROUP BY 時,必須了解每個群組將在輸出中產生一行。未包含在 GROUP BY 子句中的列的值將針對群組中的每一行有效地重複。
考慮EMP 表:
ename | sal -------+------ Smith | 1000 Jones | 1200 Davis | 1100 Wilson | 1200 Brown | 1300
場景1:無效的GROUP BY 表達式
SELECT ename, sal FROM emp GROUP BY ename, sal;
此查詢失敗並出現錯誤ORA -00979,因為Sal 不包含在GROUP BY 子句中。每行都有不同的 sal 值,導致每位員工有多行。
場景2:有效的GROUP BY 表達式
SELECT ename, sal FROM emp GROUP BY ename;
此查詢有效因為它按名稱對行進行分組,這確保了每個員工的行都是唯一的。對於屬於同一員工的每一行,sal 的值將會重複。
場景3:無效的GROUP BY 表達式
SELECT ename, sal FROM emp GROUP BY sal;
此查詢無效,因為它嘗試按sal 對行進行分組,這將導致具有相同資訊的員工出現多行salary.
場景4:無效的GROUP BY表達式
SELECT empno, ename, sal FROM emp GROUP BY sal, ename;
此查詢無效,因為 GROUP BY 子句中的列順序必須與列順序相符在 SELECT 子句中。
場景5:有效的GROUP BY 表達式
SELECT empno, ename, sal FROM emp GROUP BY empno, ename, sal;
此查詢有效,因為GROUP BY 子句中的列順序與SELECT 子句中的列順序匹配。結果將為 empno、ename 和 sal 的每個不同組合包含一行。
總之,不含聚合函數的 GROUP BY 透過對共享相同值的行進行分組來刪除指定列中的重複項。但是,未包含在 GROUP BY 子句中的所有欄位將在輸出行中具有重複值。
以上是SQL 中沒有聚合函數時 GROUP BY 如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!