Logo
    教程

    Python

    Python 教程 Django 教程 Numpy 教程 Pandas 教程 Tkinter 教程 Pytorch 教程 Flask 教程 OpenCV 教程

    Java

    Java 教程 Servlet 教程 JSP 教程 Spring Boot 教程 Spring Framework 教程 Hibernate 教程 JavaFX 教程 Java Web Services 教程

    .Net Framework

    .Net Framework 教程 C# 教程 ASP.Net 教程 ADO.Net 教程 WPF 教程

    AI, ML and Data Science

    人工智能教程 机器学习教程 数据科学教程 深度学习教程 TensorFlow 教程 人工神经网络教程 Matplotlib 教程 Python Scipy 教程

    Cloud Technology

    云计算教程 AWS 教程 Microsoft Azure 教程 Salesforce 教程 GCP 教程

    B.Tech and MCA

    DBMS 教程 数据结构教程 操作系统教程 计算机网络教程 DAA 教程 计算机组织教程 软件工程教程 数据挖掘教程

    Web Technology

    HTML 教程 CSS 教程 JavaScript 教程 Jquery 教程 Angular 8 教程 React 教程 React Native 教程 Node.js 教程

    PHP

    PHP 教程 MySQL 教程 Laravel 教程 WordPress 教程 CodeIgniter 教程

    Software Testing

    软件测试教程 Selenium 教程 JIRA 教程 JMeter 教程 Postman 教程 TestNG 教程 SoapUI 教程 Cucumber 教程
    Interview

    Technical Interview

    Python 面试题 Java 面试题 .Net 面试题 C++ 面试题 React 面试题 Node.js 面试题 Angular 面试题 SQL 面试题 HR 面试题

    Java Interview

    Spring Boot 面试题 Spring 面试题 Hibernate 面试题 JDBC 面试题 Servlet 面试题 Maven 面试题 Jenkins 面试题

    Python

    Django 面试题 Pandas 面试题 Express.js 面试题 Python 编程面试题 Python 5年经验面试题

    Web Interview

    HTML 面试题 CSS 面试题 JavaScript 面试题 Jquery 面试题 PHP 面试题 Laravel 面试题 AJAX 面试题 前端开发工程师面试题 jQuery 面试题

    Database Interview

    DBMS 面试题 SQL 面试题 PL/SQL 面试题 Oracle 面试题 MySQL 面试题 MongoDB 面试题 Redis 面试题

    B.Tech / MCA

    DBMS 面试题 操作系统面试题 OOPs 面试题 DSA 面试题 计算机网络面试题

    Important Interview

    C 面试题 Power BI 面试题 C# 面试题 Excel 面试题 C# 面试题 机器学习面试题 AWS 面试题 微服务面试题 MySQL 面试题

    Software Testing Interview

    手动测试面试题 Selenium 面试题 API 测试面试题 ETL 测试面试题 移动测试面试题

    Company Interviews

    IBM 面试题 Adobe 面试题 Microsoft 面试题 Amazon 面试题 TCS 面试题 Wipro 面试题 Accenture 面试题
    Compiler

    Online Compilers

    Python 在线编译器 Java 在线编译器 PHP 在线编译器 C 在线编译器 C++ 在线编译器 HTML 在线编译器 JavaScript 在线编译器 TypeScript 在线编译器 R 在线编译器 Swift 在线编译器 Kotlin 在线编译器 Go 在线编译器 C# 在线编译器 Perl 在线编译器 Groovy 在线编译器 HTML, CSS & JavaScript 在线编辑器

    Multiple Choice Questions

    Python MCQs Java MCQs PHP MCQs C 语言 MCQs C++ MCQs HTML mcq JavaScript MCQs SQL MCQs 操作系统 MCQs 计算机基础 MCQs 计算机网络 MCQs DBMS MCQs 数据结构 MCQs 软件工程 MCQs 云计算 MCQs 人工智能 MCQs
    • Python Logo Python
    • java Java
    • javascript JavaScript
    • sql SQL
    • c C
    • c++ C++
    • html HTML
    • css CSS
    • React React
    • Node.js Node.js
    • Spring Boot Spring Boot
    • c# C#
    • php PHP
    • MySQL MySQL
    • MongoDB MongoDB
    • Artificial Intelligence AI
    • Machine Learning ML
    • data structures DSA
    • dbms DBMS
    • Operating System OS
    • aptitude Aptitude
    • reasoning Reasoning

    • SQL Server 教程
    • 安装 Visual Studio
    • 安装 SQL Server
    • SQL Server Management Studio
    • SQL Server 数据类型

    • SQL Server 登录数据库
    • SQL Server 创建数据库
    • SQL Server 选择数据库
    • SQL Server 删除数据库

    • SQL Server 创建表
    • SQL Server 删除表
    • SQL Server 插入数据
    • SQL Server 更新数据
    • SQL Server 删除数据
    • SQL Server 删除 TOP
    • SQL Server ALTER TABLE
    • SQL Server 中的视图

    • SQL Server MIN 函数
    • SQL Server MAX 函数
    • SQL Server SUM 函数
    • SQL Server AVG 函数
    • SQL Server COUNT 函数

    • SQL Server 比较运算符
    • SQL Server UNION 运算符
    • SQL Server INTERSECT 运算符
    • SQL Server IN 运算符
    • SQL Server NOT 运算符
    • SQL Server BETWEEN 运算符
    • SQL Server IS NULL 运算符
    • SQL Server IS NOT NULL 运算符
    • SQL Server LIKE 运算符
    • SQL Server EXIST 运算符

    • SQL Server DISTINCT 子句
    • SQL Server GROUP BY 子句
    • SQL Server WHERE 子句
    • SQL Server ORDER BY
    • SQL Server HAVING
    • SQL Server SELECT
    • SQL Server GROUPING SETS

    • SQL Server 主键
    • SQL Server 启用主键
    • SQL Server 禁用主键
    • SQL Server 删除主键
    • SQL Server 外键
    • SQL Server 启用外键
    • SQL Server 禁用外键
    • SQL Server 删除外键

    • SQL Server 创建视图
    • SQL Server 备份数据库
    • SQL Server 还原数据库

    • SQL Server Substring
    • SQL Server 中的 CTE
    • SQL Server 中的游标
    • SQL Server 中的索引
    • SQL Server 行号
    • SQL Server 重命名列
    • SQL Server CASE
    • SQL Server JOIN
    • SQL Server 添加列
    • SQL Server 删除列
    • SQL Server 描述表
    • SQL Server Replace
    • SQL Server COALESCE
    • SQL Server IF ELSE
    • SQL Server ISNULL 函数
    • SQL Server 临时表
    • SQL Server 中的存储过程
    • SQL Server 中的触发器
    • SQL Server CAST
    • SQL Server CONVERT
    • SQL Server SELECT INTO
    • SQL Server 聚合函数
    • SQL Server INSERT INTO SELECT
    • SQL Server NULLIF
    • SQL Server 复制表
    • SQL Server 重命名表
    • SQL Server 截断表
    • 如何查找 SQL Server 版本
    • SQL Server CHARINDEX() 函数
    • SQL Server 中的表变量
    • SQL Server 中的 RANK 函数
    • SQL Server PIVOT
    • SQL Server 中的 EOMONTH 函数
    • SQL Server 别名
    • SQL Server Left 函数
    • SQL Server 序列
    • SQL Server 同义词
    • SS DATEDIFF 函数
    • SQL Server WHILE LOOP
    • 从 SQL Server 表中查找和删除重复项
    • SQL Server CURRENT_TIMESTAMP 函数
    • SQL Server DATEADD 函数
    • SQL Server MERGE
    • SQL Server OFFSET FETCH
    • SQL Server 中的锁
    • SQL Server ROLLUP
    • SQL Server CROSS JOIN
    • SQL SERVER UPDATE JOIN
    • SQL Server 注释
    • SQL Server IDENTITY
    • SQL Server CONCAT 函数
    • SQL Server CONCAT_WS 函数
    • SQL Server 复制
    • SQL Server 事务
    • SQL Server 约束
    • SQL Server PROFILER
    • SQL Server 函数
    • SQL Server 窗口函数
    • SQL Server 日期函数
    • SQL Server 数学函数
    • SQL Server 字符串函数
    • SQL Server 重命名数据库
    • SQL Server 显示/列出数据库
    • SQL Server STUFF() 函数
    • SQL Server 排序规则
    • SQL Server 复合键
    • SQL Server 唯一键
    • 如何确定当前安装在 SQL Server 上的 Service Pack

    • SSIS 教程
    • SSRS 教程

    • SQL Server 面试
    ← 上一篇

    SQL Server ROLLUP

    17 Mar 2025 | 6 分钟阅读

    SQL Server 中的 ROLLUP 子句是分组集运算符的扩展。本文将全面概述 ROLLUP 子句,用于汇总具有小计和总计的不同组。

    它是 GROUP BY 子句的一个子类,它在层次结构的多个级别上执行聚合操作并准备汇总报告。它允许我们在单个查询中生成多个分组集,这对于 GROUP BY 子句来说是不可能的,因为它只聚合一个组。因此,我们可以说 ROLLUP 通过使用单个查询创建几个分组集(沿列的层次结构)来提供更详细的分析。

    注意:ROLLUP 修饰符会生成汇总输出,包括表示超汇总摘要操作的额外行。它主要用于支持 OLAP(在线分析处理)操作。

    语法

    以下是说明 SQL Server 中 ROLLUP 子句的基本语法

    上面语法的参数描述如下

    • column_lists:指示来自指定表的列名。
    • aggregate_function (column):用于对 SUM、COUNT、AVG 等给定列执行聚合。
    • table_name:指示将从中获取数据的源表名。
    • GROUP BY:这是一个子句,用于指定一个或多个列来创建聚合操作在其上执行的组。
    • ROLLUP:它与 GROUP BY 子句结合使用,用于创建多个组(即分组集)并以层次结构应用聚合函数。

    SQL Server 还提供了另一种使用 ROLLUP 子句的语法,如下所示

    两种语法将返回相同的输出。

    SQL Server ROLLUP 示例

    让我们通过首先使用以下语句创建一个名为 **EMPLOYEE** 的表来理解何时以及如何在查询中实际使用 ROLLUP 子句

    接下来,我们将向此表插入一些记录,如下所示

    执行 SELECT 语句以验证表数据

    SQL Server ROLLUP

    在上表中,我们可以看到我们有来自三个不同国家(美国、英国和印度)的员工。现在,基于这些表数据,**我们希望编写一个查询按国家/地区检索薪水**,如下所示

    执行查询将返回以下输出

    SQL Server ROLLUP

    如果我们要根据国家/地区获取总薪水,此查询就很好。但当我们要的结果中也包含所有薪水的总计时,它不是一个更好的选择,因为它只能在一个级别上聚合数据,即小计,而不是总计。因此,我们将使用 ROLLUP 子句以及 GROUP BY 来检查类别的小计和总计,因为它扩展了 GROUP BY 子句的功能。

    以下查询用于检索按国家/地区分组的薪水的小计和总计

    我们将获得以下输出

    SQL Server ROLLUP

    我们也可以使用以下语法获得相同的输出

    这是结果:

    SQL Server ROLLUP

    在输出中,我们可以看到每个国家/地区的总薪水,并且还会返回所有薪水的总计。ROLLUP 子句将在结果集中添加一个额外的行来显示总计。此处 NULL 代表总计。我们还可以使用 **COALESCE** 函数为其赋予有意义的名称,以将 NULL 值替换为提供的任何文本。

    以下语句将用“Grand Total”替换 null 值

    这是用给定文本替换 NULL 值的结果

    SQL Server ROLLUP

    多列的 ROLLUP

    我们已经知道 ROLLUP 子句在层次结构的多个级别上执行聚合操作,并在单个查询中准备每个级别的汇总报告。

    让我们通过一个例子来理解这个概念。假设 GROUP BY 子句中有多个列。在这种情况下,ROLLUP 子句假定 GROUP BY 子句中提供的列之间存在层次结构。每当列值发生变化时,查询会在结果末尾添加一个额外的超汇总摘要行。

    例如,我们在 GROUP BY 子句中指定了三列,如下所示

    ROLLUP 修饰符假定以下层次结构

    并生成以下分组集

    以下查询有助于更清楚地理解这一点

    由于我们没有使用 ROLLUP 子句,基于 GROUP BY 子句中提供的多列对员工表进行的汇总将如下所示。在这种情况下,我们只会收到 **性别/国家/地区分析级别** 的汇总值。

    SQL Server ROLLUP

    现在我们将分析带有 ROLLUP 子句的输出

    执行查询将显示以下输出,其中我们可以看到几行额外的行

    SQL Server ROLLUP

    此输出在三个不同的分析级别生成数据,如下所述

    • 第一级为每组女性员工生成一个额外的子汇总摘要行,然后显示所有员工的总薪水。它会将 country 列设置为 NULL。
    • 第二级为每组男性员工生成一个额外的子汇总摘要行,然后显示总薪水。它也会将 country 列设置为 NULL。
    • 最后,第三级将生成一个额外的超汇总摘要行,显示所有列的总计。它会将 gender 和 country 列设置为 NULL。

    它确保如果我们修改 GROUP BY 子句中定义的列的顺序,我们会得到不同的答案。请看下面的查询

    这是结果:

    SQL Server ROLLUP

    与 ROLLUP 结合使用的 GROUPING 函数

    GROUPING() 函数确定输出中的 NULL 是常规分组值、超汇总值还是总计。当 **NULL** 出现在超汇总行中时,它返回 1。否则,它返回 0。GROUPING() 函数可以在 select 列表、HAVING 子句和 ORDER BY 子句中使用。

    请看下面的查询

    执行查询将返回以下输出

    SQL Server ROLLUP

    在输出中,我们可以看到当 NULL 出现在gender 列的超汇总行中时,GROUPING(gender) 返回 1。否则,它将返回零。

    类似地,当 NULL 出现在country 列的超汇总行中时,GROUPING(country) 返回 1。否则,它将返回零。

    ROLLUP 与 CUBE 有何不同?

    SQL Server 中的 ROLLUP 和 CUBE 用于报告目的,并显示小计和总计。我们通常将这些子句与 GROUP BY 子句一起使用。但是,它们用于相似的目标,但它们也存在一些差异。

    ROLLUP 返回的输出显示所选列中层次结构值的聚合。另一方面,CUBE 创建一个结果集,其中包括所选列中所有可能的值组合的聚合。

    让我们举一个例子来说明这些差异。假设我们有三列 c1、c2 和 c3。接下来,我们将进行不同级别的聚合。

    如果我们将这些列与 **CUBE** 子句一起使用,例如 CUBE(c1, c2, c3),我们将得到八种可能的分组集:

    如果我们使用 **ROLLUP** 子句并将这些列作为 ROLLUP(c1, c2, c3),我们将只得到四种可能的分组集:


    下一个主题SQL Server CROSS JOIN


    ← 上一个 下一个 →



    相关帖子

    • 如何查找 SQL Server 版本

      版本是某事物的一种特定形式,它不同于同一版本的其他形式。本文将解释查找您系统上运行的 SQL Server 版本的完整概述。我们可以通过多种方式获取 SQL Server 版本,其中一些……

      阅读 4 分钟

    • SQL Server Left 函数

      它用于获取从左侧开始的前 n 个字符,这些字符作用于应用了 LEFT 函数的列。SQL Server 中 LEFT 函数的语法如下:LEFT ( string_value , number_of_characters_to_be_returned ) 在上面的语法中:...

      阅读 3 分钟

    • SQL Server 约束

      约束是应用于表或列的预定义规则和限制,用于阻止未经授权的值插入到表中。它们负责确保表中列的数据准确性、完整性和可靠性。约束也告诉数据...

      阅读 12 分钟

    • SQL Server 注释

      注释是程序员可读的解释或批注,用于 SQL 语句中,不影响其执行。它用于使 SQL 语句更易于人类理解。我们可以在任何关键字、参数或标点符号之间包含注释...

      阅读 3 分钟

    • SQL Server 排序规则

      SQL Server 中的排序规则 (Collation) 是一组预定义的规则,用于确定数据的保存、访问和比较方式。换句话说,它是一个配置设置,指示数据库引擎如何处理字符数据。SQL Server 有大量的排序规则用于处理...

      7 分钟阅读

    • SQL Server 中的 CTE

      SQL Server 中的公共表表达式 (CTE) 我们将使用 SQL Server 的公共表表达式或 CTE 来简化复杂的联接和子查询。它还提供了一种查询分层数据的方法,例如组织层次结构。本文全面概述了 CTE,...

      阅读 6 分钟

    • SQL Server 窗口函数

      我们都熟悉常规的聚合函数,它对表执行计算并与 GROUP BY 子句一起使用。但是,只有一小部分 SQL 用户使用窗口函数,而这些函数是对一组行进行操作并显示...

      阅读 10 分钟

    • SQL Server 重命名数据库

      数据库是数据(包括表、行、列和索引)的逻辑有序集合。它有助于用户定期查找重要信息,并且使用户能够轻松地访问和管理数据库中的记录。在 SQL Server 中……

      阅读 4 分钟

    • SQL Server NULLIF

      NULLIF 函数在 SQL Server 中接受两个参数并进行比较,以确定它们是否相同或不同。如果两个参数相等,它将返回 NULL 值。如果参数不相同,它们将返回第一个参数。我们可以使用...

      阅读 4 分钟

    • SQL Server IF ELSE

      IF 语句是 SQL Server 中控制流函数的一部分。通常,它是各种编程语言中的决策语句,根据给定条件返回一个值。当给定条件满足时,此语句执行 IF 块中编写的代码...

      阅读 4 分钟


    订阅 Tpoint Tech

    我们请求您订阅我们的新闻通讯以获取最新更新。



    Logo

    我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题

    联系信息

    G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India

    hr@tpointtech.com

    +91-9599086977

    关注我们
    Tpoint Tech Facebook PageTpoint Tech X PageTpoint Tech Linkedin PageTpoint Tech Telegram ChannelTpoint Tech Youtube ChannelTpoint Tech instagram Page
    教程
    Java 数据结构 C 语言 C++ 教程 C# 教程 PHP 教程HTML 教程 JavaScript 教程jQuery 教程Spring 教程
    面试题
    Microsoft Amazon Adobe Intuit Accenture Cognizant Capgemini Wipro Tcs Infosys
    在线编译器
    C R C++ Php Java Html Swift Python JavaScript TypeScript
    最新帖子 | 教程列表 | 隐私政策 | 关于我们 | 联系我们
    © 版权所有 2011 - 2025 TpointTech.com。保留所有权利。
    TPoint Tech Logo