在 SELECT 查詢中使用分組集

2021-09-04 13:25:41 字數 1671 閱讀 4147

group by 子句可以包括 grouping sets、cube、rollup、with cube 或 with rollup等從屬子句,從而為 select 子句 列表中的聚合函式提供有關每個組(而不是各行)的資訊。

更多詳細資訊,請參考

with cube 或 with rollup 等從屬子句不符合 iso 規範,因此後續版本 sql server 將刪除該功能。請避免在新的開發工作中使用該功能。

一、rollup 從屬子句

1. 語法

rollup 從屬子句生成簡單的 group by 聚合行以及小計行或超聚合行,還生成乙個總計行。

返回的分組數等於中的表示式數加一。

2. 示例

下面的語句會為 (a, b, c)、(a, b) 和 (a) 值的每個唯一組合生成乙個帶有小計的行。 還將計算乙個總計行。

列是按照從右到左的順序彙總的。 列的順序會影響 rollup 的輸出分組,而且可能會影響結果集內的行數。

select a, b, c, sum ( )

from t

group by rollup (a,b,c);

二、cube 從屬子句

1. 語法

生成簡單的 group by 聚合行、rollup 超聚合行和交叉**行。

cube 針對 中表示式的所有排列輸出乙個分組。

生成的分組數等於 (2n),其中 n = 中的表示式數。

2. 示例

下面的語句會為 (a, b, c)、(a, b)、(a, c)、(b, c)、(a)、(b) 和 (c) 值的每個唯一組合生成乙個帶有小計的行,還會生成乙個總計行。

列的順序不影響 cube 的輸出。

select a, b, c, sum ()

from t

group by cube (a,b,c);

三、grouping sets 從屬子句

1. 語法

在乙個查詢中指定資料的多個分組。 僅聚合指定組,而不聚合由 cube 或 rollup 生成的整組聚合。 其結果與針對指定的組執行 union all 運算等效。

grouping sets 可以包含單個元素或元素列表。grouping sets 可以指定與 rollup 或 cube 返回的內容等效的分組。可以包含 rollup 或 cube。

2. 示例

下面的語句會為 (a,b) 和 (c) 值的每個分組集生成乙個帶有小計的行。還將計算乙個總計行。

select a, b, sum ()

from t

group by grouping sets

(a,b)

(c)上例相當於:

select a, b, sum ()

from t

group by a,b

union all

select null, null, sum ()

from t

group by c

union all

select null, null, sum ()

from t

在 SELECT 查詢中使用分組集

group by 子句可以包括 grouping sets cube rollup with cube 或 with rollup等從屬子句,從而為 select 子句 列表中的聚合函式提供有關每個組 而不是各行 的資訊。更多詳細資訊,請參考 with cube 或 with rollup 等從屬子...

在 SELECT 查詢中使用 JOIN 聯接

在 select 語句中,如果 from 子句引用了多個表源或檢視,可以使用 join 指示指定的聯接操作應在指定的表源或檢視之間執行。一 交叉聯接 cross join 交叉聯接將執行乙個叉積 迪卡爾乘積 將乙個表的每一行與另乙個表的所有行進行匹配,生成乙個虛擬表。如果乙個表有5行,另乙個表有6行...

在 SELECT 查詢中使用 JOIN 聯接

在 select 語句中,如果 from 子句引用了多個表源或檢視,可以使用 join 指示指定的聯接操作應在指定的表源或檢視之間執行。一 交叉聯接 cross join 交叉聯接將執行乙個叉積 迪卡爾乘積 將乙個表的每一行與另乙個表的所有行進行匹配,生成乙個虛擬表。如果乙個表有5行,另乙個表有6行...