SQL GROUPING_ID 函数

SQL GROUPING_ID 是聚合函数之一,用于计算分组级别。此 GROUPING_ID 函数将返回整数值。此 Grouping_Id 的基本语法如下所示

SELECT GROUPING_ID ([Column1, COlumn2,...,ColumnN)
FROM [Source]
GROUP BY Column1, COlumn2,...,ColumnN

在我们进行实际示例之前,我将向您展示 GROUPING 和 GROUPING_ID 之间的区别。

  • 如果我们对单个列进行分组,则 SQL Server GROUPING_ID 和 GROUPING 函数将返回相同的结果
  • 如果我们对多列进行分组,则 GROUPING_ID (Column1, Column2, Column3) = 连接的 (GROUPING(Column1), (Column2), (Column3) 结果的整数值

对于这个 grouping_id 演示,我们将使用数据库中存在的 [MyEmployees] 表。从下图可以看出,[MyEmployees] 表有十四条记录

SQL Grouping_Id 函数示例

Grouping_ID 返回指定列的分组级别。在此 SQL Server 示例中,我们将向您展示这一点。

提示:请参考 GROUP BY 子句 以了解分组。

SELECT [Education]
,[Occupation]
,SUM([YearlyIncome]) as income
,GROUPING([Education]) AS 'Edu Grouping'
,GROUPING([Occupation]) AS 'Occ Grouping'
,CAST(GROUPING([Education]) AS NVARCHAR(2)) +
CAST(GROUPING([Occupation]) AS NVARCHAR(2)) AS 'Binary Grouping'
,GROUPING_ID([Education], [Occupation]) AS 'Grouping ID'
FROM [MyEmployees Table]
GROUP BY [Education]
,[Occupation] WITH ROLLUP
SQL GROUPING_ID Function 2

在此 GROUPING_ID 函数示例中,以下语句将检查是否对 Education 和 Occupation 列执行了分组,通过返回 1 和 0 来表示未执行分组。

 ,GROUPING([Occupation]) AS 'Grouping'
 ,GROUPING([Education]) AS 'Grouping 2'

以下 聚合函数 语句将连接两个分组值(Grouping(Education) 和 Grouping(Occupation))

CAST(GROUPING([Education]) AS NVARCHAR(2)) +
         CAST(GROUPING([Occupation]) AS NVARCHAR(2)) AS 'Binary Grouping'

接下来,我们找到 Education 和 Occupation 的 Grouping Id。它等于二进制分组的整数值。

GROUPING_ID([Education], [Occupation]) AS 'Grouping ID'

注意:我们可以使用 8421 模式将二进制值转换为整数。例如,10 的整数值为 2,111 的整数值为 7,1011 的整数值为 11