首頁 > 資料庫 > mysql教程 > SQL 中沒有聚合函數時 GROUP BY 如何運作?

SQL 中沒有聚合函數時 GROUP BY 如何運作?

Barbara Streisand
發布: 2024-12-25 08:35:23
原創
433 人瀏覽過

How Does GROUP BY Work Without Aggregate Functions in SQL?

不使用聚合函數的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板