SQL Server温故系列(5):SQL 查询之分组查询 GROUP BY (3)

GROUPING 函数用于计算分组级别,它将返回与行相关联的 GROUPING 位向量对应的数值。GROUPING_ID 按从左到右的顺序计算,如果是分组字段,则为 0,如果是小计或合计则为 1,然后按字段的顺序将计算结果组成二进制序列(位向量),最后将位向量转化为十进制数。仅当指定了 GROUP BY 时,GROUPING 才能在 SELECT 子句、HAVING 或 ORDER BY 子句中使用。

GROUPING_ID 函数在功能上等效于多个 GROUPING 函数,当查询结果有多个聚合级别时,使用该函数会更容易表达行过滤条件。示例如下:

SELECT t.CourseId,t.StudentId,t.Counts,MAX(t.Scores) Scores, GROUPING_ID(t.CourseId) gc,GROUPING_ID(t.StudentId) gs,GROUPING_ID(t.Counts) gt, GROUPING_ID(t.CourseId,t.StudentId) gcs, GROUPING_ID(t.StudentId,t.Counts) gst, GROUPING_ID(t.CourseId,t.Counts) gct, GROUPING_ID(t.CourseId,t.StudentId,t.Counts) gcst FROM T_ExamResults t WHERE t.StudentId = 1 AND t.Counts = 2 GROUP BY ROLLUP(t.CourseId,t.StudentId,t.Counts);

查询结果如下:

CourseId StudentId Counts Scores gc gs gt gcs gst gct gcst ---------- ---------- --------- --------- ------- ------- ------- ------- ------- ------- ------- 1 1 2 63.0 0 0 0 0 0 0 0 1 1 NULL 63.0 0 0 1 0 1 1 1 1 NULL NULL 63.0 0 1 1 1 3 1 3 2 1 2 98.0 0 0 0 0 0 0 0 2 1 NULL 98.0 0 0 1 0 1 1 1 2 NULL NULL 98.0 0 1 1 1 3 1 3 3 1 2 73.0 0 0 0 0 0 0 0 3 1 NULL 73.0 0 0 1 0 1 1 1 3 NULL NULL 73.0 0 1 1 1 3 1 3 NULL NULL NULL 98.0 1 1 1 3 3 3 7 5、本文小结

本文主要讲述了 SQL Server 中分组查询的相关知识点,包括 GROUP BY 与聚合函数、HAVING 联合使用及 GROUP BY 的标准分组、扩展分组、扩展函数等。

另外,不知道会不会有读者感到疑惑,为什么扩展分组返回的结果集中经常会出现 NULL 值?其实这是 NULL 的一个特殊应用,它在 ROLLUP、CUBE 或 GROUPING SETS 操作的结果集内作为字段的占位符,表示全体(数据)。

SQL Server 温故系列博文用到的库表及数据的 T-SQL 语句下载

本文参考链接:

1、

2、

3、

4、

本文链接
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjjd.html