zoukankan      html  css  js  c++  java
  • SQL分组GROUP BY ROLLUP 简单使用

    最近,在写存储过程的时候遇到一个问题,将数据分组统计时,需要显示全部数据和统计行像Excel表一样,而不是只显示统计数据。一开始想到了循环所有数据,然后统计,拼接的方式,但是实现起来比较麻烦,而且效率很低,通过查询发现了GROUP BY ROLLUP函数,能够解决问题,记录下来和大家分享,文笔和技术水平不高,旨在分享,欢迎指正!

    1、创建表,插入数据

    CREATE TABLE [dbo].[Table_1](
        [Course] [varchar](50) NULL,
        [Name] [varchar](50) NULL,
        [Score] [int] NULL
    )
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'Math', N'A', 80)
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'Math', N'B', 90)
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'Math', N'C', 85)
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'English', N'A', 81)
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'English', N'B', 91)
    INSERT [dbo].[Table_1] ([Course], [Name], [Score]) VALUES (N'English', N'C', 86)

    此表是学科(Course)、学生(Name)和成绩(Score)的关系表,结构比较随意,只是为了介绍ROLLUP功能。

    2、一个字段分组

    根据Course分组

    SELECT [Course],SUM([Score]) AS TotalScore
    FROM [huo].[dbo].[Table_1]
    GROUP BY [Course]

    使用ROLLUP根据Course分组

    SELECT [Course],SUM([Score]) AS TotalScore
    FROM [huo].[dbo].[Table_1]
    GROUP BY ROLLUP([Course])

    相比前者多了一行合计。

    3、两个字段分组

    根据Course和Name分组

    SELECT [Course],[Name],SUM([Score]) AS TotalScore
    FROM [huo].[dbo].[Table_1]
    GROUP BY [Course],[Name]

    使用ROLLUP根据Course和Name分组

    SELECT [Course],[Name],SUM([Score]) AS TotalScore
    FROM [huo].[dbo].[Table_1]
    GROUP BY ROLLUP([Course],[Name])

    相比前者多了三行合计,GROUP BY ROLLUP 是GROUP BY Course、GROUP BY (Course,Name)和GROUP BY NULL 三种情况的去重集合。

    目前得到的结果集,经过处理就得到了想要的结果。

    参考:https://www.cnblogs.com/lxh1076/p/5697929.html

  • 相关阅读:
    [引用]SQLServer占CPU100%
    负能量程序员杂谈(2)- 管理中的情和义
    负能量程序员杂谈(1)-世界上最单纯的职业:程序员
    FLV文件格式官方规范详解
    rtmp官方标准规范详细解析
    万恶的KPI、新兴的OKR及让人纠结的程序员考核
    管理点滴(一)
    选拨管理者的一个必要条件
    团队管理的简单总结:少即是多,体力透支,负能量管理,自我进化团队,沟通
    我的2015计划,目标
  • 原文地址:https://www.cnblogs.com/jianrenmo/p/10374502.html
Copyright © 2011-2022 走看看