数据库小计和总计之 Rollup函数 简单介绍

article/2025/9/13 14:46:14

以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性
来源于
易百教程

  1. SQL ROLLUP简介ROLLUP是GROUP BY子句的扩展。 ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行。 通过使用ROLLUP选项,可以使用单个查询生成多个分组集。
    使用语法:group by rollup(a,b)
    说明:针对 a 列、b 列分别进行分组,再针对 (a,b) 组合列进行分组,最后汇总。

注意,分组集是一组用于分组的列。 例如,一个由仓库返回库存的查询,分组集是(warehouse)。

SELECTwarehouse, SUM(quantity) qty
FROMinventory
GROUP BYwarehouse;

以下是SQL ROLLUP的基本语法:

SELECT c1, c2, aggregate_function(c3)
FROMtable
GROUP BY ROLLUP (c1, c2);

ROLLUP假定输入列之间存在层次结构。 例如,如果输入列是(c1,c2),则层次结构c1> c2。 ROLLUP生成考虑此层次结构有意义的所有分组集。 这就是为什么我们经常使用ROLLUP来生成小计和总计以用于报告目的。
在上面的语法中,ROLLUP(c1,c2)生成以下三个分组集:

(c1,c2)
(c1)
()

Oracle,Microsoft SQL Server和PostgreSQL支持此语法。 但是,MySQL的语法略有不同,如下所示:

SELECT c1, c2, aggregate_function(c3)
FROMtable_name
GROUP BY c1, c2 WITH ROLLUP;
  1. SQL ROLLUP示例我们将使用在GROUPING SETS教程中设置的inventory表进行演示。
mysql> select * from inventory;
+---------------+---------+----------+----------+
| warehouse     | product | model    | quantity |
+---------------+---------+----------+----------+
| San Jose      | iPhone  | 6s       |      100 |
| San Fransisco | iPhone  | 6s       |       50 |
| San Jose      | iPhone  | 7        |       50 |
| San Fransisco | iPhone  | 7        |       10 |
| San Jose      | iPhone  | X        |      150 |
| San Fransisco | iPhone  | X        |      200 |
| San Jose      | Samsung | Galaxy S |      200 |
| San Fransisco | Samsung | Galaxy S |      200 |
| San Fransisco | Samsung | Note 8   |      100 |
| San Jose      | Samsung | Note 8   |      150 |
+---------------+---------+----------+----------+
10 rows in set

2.1. SQL ROLLUP有一个列示例
以下语句使用GROUP BY子句和SUM()函数按仓库查找总库存:

SELECT warehouse, SUM(quantity)
FROMinventory
GROUP BY warehouse;
+---------------+---------------+
| warehouse     | SUM(quantity) |
+---------------+---------------+
| San Fransisco | 560           |
| San Jose      | 650           |
+---------------+---------------+
2 rows in set

要检索所有仓库中的总产品数,请将ROLLUP添加到GROUP BY子句,如下所示:

SELECT warehouse, SUM(quantity)
FROMinventory
GROUP BY ROLLUP(warehouse);

执行上面示例代码,得到以下结果:

正如在结果中看到的那样,warehouse列中的NULL值指定了总计超级聚合行。 在此示例中,ROLLUP选项使查询生成另一行,显示所有仓库中的总产品数量。要使输出更具可读性,可以使用COALESCE()函数将NULL值替换All值,如下所示:

SELECT COALESCE(warehouse, 'All warehouses') AS warehouse,SUM(quantity)
FROMinventory
GROUP BY ROLLUP (warehouse);

执行上面示例代码,得到以下结果:

2.2. SQL ROLLUP有多列示例
以下语句按warehouse和product计算库存:

SELECT warehouse, product, SUM(quantity)
FROMinventory
GROUP BY warehouse, product;

执行上面示例代码,得到以下结果:

将ROLLUP添加到GROUP BY子句:

SELECT warehouse, product, SUM(quantity)
FROMinventory
GROUP BY ROLLUP (warehouse , product);

执行上面示例代码,得到以下结果:

请注意,输出包含两个分析级别的摘要信息,而不仅仅是一个:

在指定仓库的每组产品行之后,将显示一个额外的摘要行,显示总库存。 在这些行中,product列中的值设置为NULL。在所有行之后,将显示一个额外的摘要行,显示所有仓库和产品的总库存。 在这些行中,warehouse 和 product 列中的值设置为NULL。
2.3. SQL ROLLUP带有部分汇总的示例
可以使用ROLLUP执行部分汇总,以减少计算的小计数,如以下示例所示:

SELECT warehouse, product, SUM(quantity)
FROMinventory
GROUP BY warehouse, ROLLUP (product);

执行上面示例代码,得到以下结果:

在此示例中,ROLLUP仅为product列而不是warehouse列生成超级聚合摘要。
在本教程中,您学习了如何使用SQL ROLLUP通过单个查询执行多级分析。


http://chatgpt.dhexx.cn/article/eUocG3YE.shtml

相关文章

Oracle中rollup函数详解

【基本介绍】 【格式】:group by rollup(字段1,字段2,字段3,...,字段n) 【说明】:rollup主要用于分组汇总,如果rollup中有n个字段,则会分别按【字段1】、【字段1,字段2】,【字段1,字段2,字段3】,...&…

超硬核,SQL注入之时间盲注,原理+步骤+实战思路

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《网络安全快速入门》 时间盲注 一、什么是时间盲注?二、使用场景三、使用步骤第一步…

SQL盲注注入——布尔型

盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。本次主要讲解的是基于布尔的盲注。 Length()函数 返回字符串的长度 Substr&…

【SQL注入漏洞-04】布尔盲注靶场实战

布尔盲注 当我们改变前端页面传输给后台sql参数时,页面没有显示相应内容也没有显示报错信息时,不能使用联合查询注入和报错注入,这时我们可以考虑是否为基于布尔的盲注。 布尔盲注原理: 利用页面返回的布尔类型状态,正…

SQL注入之盲注简单总结

Mysql盲注总结 什么是盲注? 盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。SQL盲注与SQL普通注入的区别?…

sql盲注

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 sql注入--盲注 前言一、什么是盲注二、步骤示例1.测试注入点2.测所在数据库长度3. 利用ASCII码猜当前数据库名 4.利用ASCII码查询表名5、利用ASCII码查询字段名sql手注所用到…

Sql盲注与普通注入的区别

Sql盲注与普通注入的区别 在学习sql注入的时候,好多同学都是不弄清楚原理,去浏览器上狂搜一下注入语句,就开始对老师给的靶机注入,虽然能注入成功,但是不清楚原理,对以后的学习和工作没有多大的好处。现在我…

SQL 注入-盲注

目录 一、什么时候用到盲注? 二、盲注的优缺点 三、盲注的流程 四、盲注的分类 五、布尔盲注 5.1、原理以及什么时候使用布尔盲注? 5.2、例如upload-labs靶场中的Less-8 5.3、布尔盲注常用函数及定义 5.4、length()函数的使用方法 5.5、substr…

Sqlmap使用-盲注小实验

目录 sqlmap简介 基本格式 sqlmap详细命令: Options(选项): Target(目标): Request(请求): Enumeration(枚举): O…

SQL注入原理-布尔盲注

小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注。 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1、判断是否存在注入点 2、尝试用报错盲注看是否能够成功爆出数据 3、使用布尔盲注来爆出数据信息…

DVWA之sql注入——盲注

1.盲注 1.1 布尔盲注 布尔很明显的Ture跟Fales,也就说它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错 信息。 1.判断是否存在注入,注入的类型 不管输入框输入为何内容,页面上只会返回以下2种情形的提示&#xff…

SQL注入2——盲注(重学)

SQL注入——盲注 SQL注入——盲注 SQL注入——盲注一、布尔型盲注1、判断2、盲注库名3、盲注表名4、盲注列名5、盲注数据 时间型盲注总结 一、布尔型盲注 假如网站一定存在SQL注入,当注入SQL语句(1’ and 12#)之后,网站页面缺没有…

注入利用——盲注

盲注基本概念: 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。 基于布尔的盲注 Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库 中的相关信息。 …

SQL注入-布尔盲注

页面没有显示位 , 没有报错信息 , 只有成功和不成功两种情况时 , 可以使用布尔盲注 本次以 SQLi LABS 第9关为案例进行讲解 布尔盲注常用的两个函数(我觉得) length(abc) -- 判断字符串长度 substr(abc,1,1) -- 截取字符串,从第1个字符开始截取,截取1个 第一步,判断注入类型…

SQL注入原理-时间盲注

小伙伴们大家好!本期为大家带来的是SQL注入原理之时间盲注。 目录 使用环境 常见函数与语句 sleep()函数 if语句 substr()函数 ord()函数 length()函数 实战演示 1、判断是否存在注入点 2、使用时间盲注爆出数据 1、爆出当前数据库名的长度 2、爆出数…

sql注入之盲注相关知识

盲注 一.概念理解: 盲注(Blind SQL Injection ),就是在 sql 注入过程中, sql 语句执行之后, 数据不能回显到前端页面,需要利用一些方法进行判断或者尝试。 二.盲注基本条件: 自己可以控制输入 原程序要执行的代码拼接了用户输入的数据。 …

盲注--理论知识

盲注的简单定义: 我们在查询过程中,页面只有两种情况:“true”和“false”,要么有,要么没有;查询表的记录和语句错误也不会显示。这种状况下的注入,称为盲注。 盲注的关键点: 根据…

布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《网络安全快速入门》 布尔盲注 一、适用环境二、盲注步骤三、原理分析1. 长度判断原理2. 穷举字…

SQL盲注(原理概述、分类)

盲注原理 盲注的分类 盲注常用函数 一、SQL盲注概述 盲注:即在SQL注入过程中,SQL语句执行查询后,查询数据不能回显到前端页面中,我们需要使用一些特殊的方式来判断或尝试,这个过程成为盲注 1.如果数据库运行返回结…

盲注

目录 1、注入攻击的本质 2、盲注的介绍 (一)布尔盲注 (二)时间盲注 3、盲注常用方法 (一)length()函数 (二)substr()截取字符串…