SQL小技巧3:分层汇总

前几天,QQ学习群有个小伙伴问我一个使用SQL分层汇总的问题。

今天正好分享下。

需求描述

在数据报表开发的工作中,经常会遇到需要对数据进行分组汇总的情况。

假设有一个销售数据表sales,包含列region(地区)、month(月份),以及sales_amount(销售金额)。

模型结构及样例数据如下:

create table sales(    region varchar(20),    month varchar(20),    amount decimal(10,2));
insert into sales values('北京','10月',12.26);insert into sales values('深圳','10月',12.26);insert into sales values('上海','10月',12.26);insert into sales values('北京','11月',12.26);insert into sales values('深圳','11月',12.26);insert into sales values('上海','11月',12.26);

假如,需要计算每个地区每个月的销售总额,并且还要计算每个地区整体的销售总额。也就是说,在查询出明细数据的同时,还要计算出不同层次的小计和总计。

是不是很复杂繁琐?

如果使用多个SQL语句,那么可以按层次GROUP BY汇总,最后把每层汇总结果UNION ALL起来。

可是,如果层次很多呢?是不是需要写很多个SQL才能拼接出最终的结果?

这时候,使用RULLUP函数,可以让我们轻松实现这个需求。

RULLUP函数的基本语法

先了解一下RULLUP函数的含义及其基本语法。

RULLUP是一种分组函数,用于生成分层次的汇总报表。它可以按照指定的列或表达式进行分组,并计算出每个分组的汇总值。

在ORACLE数据库中(其他数据库也有类似写法),RULLUP函数的基本语法如下:

SELECT 列1, 列2, 列3, ..., 列n, 聚合函数(列) FROM 表名 GROUP BY 列1, 列2, 列3, ..., 列n WITH ROLLUP;

在上面的语法中,可以指定需要进行分组的列(可以是多列)以及要进行汇总计算的列(使用聚合函数,如SUM、COUNT等)。然后,将需要分层汇总的列放在GROUP BY的ROLLUP函数中,就可以启用RULLUP功能。

RULLUP函数的使用示例

对于文章开头分层计算销售额的需求,可以使用如下SQL语句实现:

select    region,    month,    sum(amount)from salesgroup by rollup(region,month) ;

上面的SQL,我已经在SQL在线运行网站SQL Fiddle中运行通过。截图如下:

图片

从上面的结果可以看到,ROLLUP函数不仅生成了地区的小计,最后还生成了总计。而且,数据还按地区及月份自动做了排序,是不是很智能、很贴心。

关于SQL在线运行网站,省去了我们安装数据库,搭建环境的烦恼,而且还有多种数据库可以使用,真的是非常方便,简直是SQL新手必备。我已经在之前的文章中有过介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LInux查看cpu、磁盘、内存、网络的命令

LInux查看cpu、磁盘、内存、网络的命令 1.查看cpu系列2.查看内存方面3.查看磁盘相关 1.查看cpu系列 想知道了cpu性能好不好、忙不忙可以用lscpu、uptime、top、htop。 1.1 top 命令查看系统的实时负载, 包括进程、CPU负载、内存使用等等 top内容详解 项目意义us用…

出海电商访问亚马逊打开很慢!有什么办法可以快速解决?

亚马逊作为全球最大的电商平台,很多中国卖家在平台上做着买卖。亚马逊中国卖每天都要频繁访问亚马逊店铺处理回复邮件和处理订单,上传产品等等事宜,但是时常会遇到打开一个新页面需要等待很长时间,更甚者直接打不开页面! 亚马逊打…

纸质表格扫描转Excel的利器,让您省钱省劲

将纸质表格扫描到电脑Excel上是一种快捷而高效的数字化处理方法,使得数据可以方便地进行编辑、分析和共享。本文将介绍几种常用的方法来完成这项任务。 第一种方法是使用扫描仪。现代扫描仪具备较高的分辨率和颜色还原能力,可以将纸质表格转化为高质量的…

Mybatis插件对指定字段加解密

Mybatis插件对指定字段加解密 1、需求环境:2、需求拆分3、代码实现 (懒得去除敏感信息了,先说明以下全是截图无代码)对存量数据对增量数据 1、需求环境: 在整个项目都结束之后,甲方希望库表内所有涉及到电话号码、详细地址、身份…

thinkphp连接数据库mysql 报错问题

第一 看报错日志php如果是下面这个报错的话 就是mysql 数据库没有验证连接 ​​​​​​​[2023-12-13T09:57:0108:00][error] [10501]SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 我们就可以去mysql 的文件检查 验证身份 使…

Python爬取旅游网站热门景点信息的技术性文章

目录 一、引言 二、准备工作 三、爬取热门景点信息 1、分析网页结构 2、发送HTTP请求 3、解析HTML文档 4、提取所需信息 5、保存数据到文件或数据库 四、优化爬虫程序性能和效率 五、异常处理与日志记录 1、异常处理 2、日志记录 六、安全性与合法性考虑 七、总结…

leetcode--3. 无重复字符的最长子串[滑动窗口\哈希表 c++]

原题 : 3. 无重复字符的最长子串 - 力扣(LeetCode) 题目解析: 最长子串可以用滑动窗口解决,无重复字符可以使用哈希表解决。 算法原理: 滑动窗口哈希表 哈希表作为一个数组存放每个字符出现的次数。 …

java-集合

什么是算法和数据结构 【1】算法: (1)可以解决具体问题 :例如 1234。。。99100 解题流程算法 (2)有设计解决的具体的流程 算法1: 123 336 6410.....加到100 --》5050 算法2:(1100)*5…

Python 自动化之批量处理文件(一)

批量新建目录、文档Pro版本 文章目录 批量新建目录、文档Pro版本前言一、做成什么样子二、基本思路1.引入库2.基本架构 三、用户输入模块四、数据处理模块1.excel表格数据获取2.批量数据的生成 总结 前言 我来写一个不一样的批量新建吧。在工作中,有些同学应该会遇…

css 使用flex 完成瀑布流布局

瀑布流布局在商城类、文章类 app、网页中都是常用的&#xff0c;使用这样的形式&#xff0c;能过让整个页面更加的活波&#xff0c;也能让图片根据实际的大小来显示&#xff0c;更好的展示图片内容。那么代码如何实现呢 实现的效果 代码 <template><view class"…

登录/验证码/注册

登录 pom文件 <!--hutool工具类--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.9</version></dependency><!--jwt--><dependency><groupId>io.jsonw…

【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)

win11升级&#xff0c;tpm不兼容 写在最前面1. 打开电脑健康状况检查2. 开启tpm3. 微星主板AMD平台开启TPM2.0解决电脑健康状况检查显示可以安装win11&#xff0c;但是系统更新里显示无法更新 写在最前面 我想在台式电脑上用win11的专注模式&#xff0c;但win10不支持 1. 打…

基于自动化脚本批量上传依赖到nexus内网私服

前言 因为某些原因某些企业希望私服是不能连接外网的&#xff0c;所以需要某些开源依赖需要我们手动导入到nexus中&#xff0c;尽管nexus为我们提供了web页面。但是一个个手动导入显然是一个庞大的工程。 对此我们就不妨基于脚本的方式实现这一过程。 预期效果 笔者本地仓库…

在Node.js中MongoDB插入数据的方法

本文主要介绍在Node.js中MongoDB插入数据的方法。 目录 Node.js中MongoDB插入数据使用MongoDB原生驱动插入数据使用Mongoose插入数据 Node.js中MongoDB插入数据 在Node.js中&#xff0c;可以使用MongoDB原生驱动或Mongoose库来连接和操作MongoDB数据库。 以下是在Node.js中使用…

电子印章法律风险点及安全防范措施

公章是公司处理内外部事务的印鉴&#xff0c;公司对外的正式信函、文件、报告使用公章&#xff0c;盖了公章的文件具有法律效力。公章由公司的法定代表人执掌&#xff0c;法定代表人如果把法定代表人章与公章一同使用就代表公司行为。 随着社会数字化转型&#xff0c;电子印章及…

持续集成交付CICD:CentOS 7 安装SaltStack

目录 一、理论 1.SaltStack 二、实验 1.主机一安装master 2.主机二安装第一台minion 3.主机三安装第二台minion 4.测试SaltStack 一、理论 1.SaltStack &#xff08;1&#xff09;概念 SaltStack是基于python开发的一套C/S自动化运维工具&#xff0c;通信采用了zerom…

【UML】组件图中的供需接口与面向对象中的接口

UML&#xff08;统一建模语言&#xff09;组件图中的“供接口”&#xff08;Provided Interface&#xff09;和“需接口”&#xff08;Required Interface&#xff09;与面向对象编程中的接口概念有关联&#xff0c;但它们在应用上有所区别。 下面解释两者的关系&#xff1a; …

2023下半年软考复盘反思

工作十几年了&#xff0c;一直想考一个高级职称、但是疫情三年也没心思考&#xff0c;不想出去折腾。疫情过去&#xff0c;今年下半年想考一个&#xff0c;由于工作忙&#xff0c;准备了30天&#xff0c;成绩已经出了&#xff0c;先说结果&#xff1a;未通过。现在对这个过程反…

ElementPlus中的分页逻辑与实现

ElementPlus中的分页逻辑与实现 分页是web开发中必不可少的组件&#xff0c;element团队提供了简洁美观的分页组件&#xff0c;配合table数据可以实现即插即用的分页效果。分页的实现可以分成两种&#xff0c;一是前端分页&#xff0c;二是后端分页。这两种分页分别适用于不同…

three.js(二)

three.js&#xff08;二&#xff09; 参考前言正文简单开始(不使用任何框架)补充 粗略带过(使用Vue框架)细致讲解(比如我使用react框架)App.jsx 的进阶版 项目打包补充打包遇到的问题:原因:解决办法: 参考 https://threejs.org/docs/ 前言 上一集中,我们用到了three.js的一个…