点击“数字化审计”,可以关注哦!

开篇啰嗦话

上篇文章,为你介绍了SQL语句中select 的group by参数进行分类统计,group by在审计数据分析过程中是必然绕不开的。因为,你必然离不开各种汇总计算,例如,不同产品的采购额、销售额,不同年度的不同客户的合同额,等等,其中,提到了with cube 和with rollup两个参数,今天继续为你补充。

从零学DAX/Sql/Python之SQL篇文章索引

1

SQL系列-01-数据库及SQL Server基本操作

2

SQL系列-02-SQL Server基本介绍及SSMS

3

SQL系列-03-SQL与Python集成编辑工具ADS

4

SQL系列-04-Select语法、别名、概览数据

5

SQL系列-05-SQL数据分类汇总

6

上表中前3篇文章,对数据库及其操作、操作数据库的工具SSMS和Azure Data Studio 进行了介绍,如果你要跟着学习SQL,请务必阅读!微软的SQLServer官方教程提供了T-SQL语法详细介绍:

https://docs.microsoft.com/zh-cn/sql/t-sql/language-reference?view=sql-server-ver15

再谈group by 参数with rollup/cube

上篇文章中为你介绍了group by 及其参数with rollup/cube的基本用法。在实际工作中,我们往往需要添加“小计”和“总计”,如下图所示。

上图可以看出:

(1)group by 年度,公司名称:仅能汇总不同年度、不同公司的聚合值;

(2)group by 年度,公司名称 with rollup:还能汇总每个年度全部公司的聚合值,及所有年度全部公司的聚合值。而无法汇总每个公司全部年度的聚合值(这个得用group by 公司名称,年度 with rollup)

(3)group by 年度,公司名称 with cube:在with rollup的基础上还能汇总每个公司全部年度。也就是说,

group by 年度,公司名称 with cube=

group by 年度,公司名称 with rollup  +

group by 公司名称,年度 with rollup

但是,在上篇文章中,并未显示小计和合计,在小计和合计的地方均显示为null-空值。

这是如何做到的呢?这就需要为你介绍sql中的一个条件判断CASE WHEN语句:

条件判断语句CASE When Then else endCASE WHEN条件判断语句语法格式:

case  when 条件1  then 结果1

when 条件2  then 结果2

......

when 条件n  then 结果n

else 结果m

end

表达的含义是:当满足条件1时,返回结果1,...,如果最终没有匹配的条件,就返回结果m。

其详细语法及介绍可参见微软官网:

https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15

下面显示了不同招标方式,并且将“目录采购自动匹配”、“公开招标”、"邀请招标"三种招标方式归为“招标”、其余招标方式均归为“未招标”,sql代码如下:

SELECT distinct [招标方式]  FROM [samples].[dbo].[采购明细]GO---case when 根据不同的条件,返回不同的结果SELECT distinct [招标方式],'招标分类'=case when a.招标方式 ='目录采购自动匹配' then '招标'                when a.招标方式 ='公开招标' then '招标'               when a.招标方式 ='邀请招标' then '招标'               else '未招标'          end         FROM [samples].[dbo].[采购明细] a

sql代码及其结果如下图所示。

下面是审计确定应招未招的一个假定定义。其SQL语句为:

---应招未招:招标方式不是目录采购自动匹配、公开招标、邀请招标,且金额大于1万SELECT a.订单号,a.招标方式,a.金额,'审计认定的招标类型'=case when a.招标方式 ='目录采购自动匹配' then '应招已招'                when a.招标方式 ='公开招标' then '应招已招'               when a.招标方式 ='邀请招标' then '应招已招'               else                    (case when a.金额>10000 then '应招未招'                      else '可不招' end)          endFROM [samples].[dbo].[采购明细] a

SQL语句运行结果如下图,然后只需筛选出“应招未招”的采购订单。

Tips!  当然,实际工作中判定应招未招的条件会更加复杂,这就涉及到更加复杂的逻辑运算,后面会继续补充!

再谈group by with rollup/cube中的小计与合计

掌握了上述case when 语句后,就可以对group by with rollup/cube的结果中的null值,显示小计和合计字样。

SQL代码如下所示:

---对group by 进行with rollup后的结果,增加小计和合计---年度列如果是空值null,则年度列所在的单位格显示总计---年度列不是空值null,并且公司名称列是空值null,则单元格显示小计select case when cgmx.年度 is null then '总计' else cgmx.年度 end '年度',case when cgmx.年度 is not null  and cgmx.公司名称 is null then '小计'         else cgmx.公司名称 end '公司名称',count(cgmx.订单号) as 订单数,sum(cgmx.金额) as 采购金额 from [samples].[dbo].[采购明细] cgmxgroup by cgmx.年度,cgmx.公司名称  with rollup

SQL语句运行结果如下图

动态显示group by的结果

在审计工作中,我们不仅需要按照不同维度,运用group by来查看各种统计数据,而且往往会需要以图形的形式进行展示,以增加感官认识。

但是,传统的图型展示只能是静态的,例如,在excel中,如果需要显示不同年度的所有公司采购额和采购数量的构成,通常的做法,只能一年做一个饼图。如果需要显示不同公司的所有年度的采购额和采购数量变化趋势,通常的做法,只能一个公司做一个直线图。

但是,python中的pyechart包给出了一个新奇的解决方案-运用时间线的概念,可以完美的解决这个动态需要

下图显示了2016年三家公司采购额和采购量构成情况,当你滑动底部时间线,你会可以看到2017、2018年的构成情况。

一条线、一个页面同时承载了不同年度的显示!

下面给出动画效果图

怎么样,你是否心动了!

这要感谢pyecharts的作者之一chenjiandongx,他给与我很多的解惑。https://github.com/chenjiandongx。

这就是python的强大之处,如前我多次提到:我学习和研究python的最主要原因不是用它来清洗、处理数据,这些用excel和sql基本可以搞定,而是用它来解决excel、sql往往很难解决的问题,这个就是其中之一!

关于上述效果的代码我会在下下篇文章中予以介绍,它属于python的范畴。

下一篇我会介绍python包安装及管理的技巧,这是很多初学者最容易忽视也是最令人抓狂的问题。有了这个铺垫后,再为你介绍这个动画的代码!

随着轻轻的风轻轻地飘

历经的路都会刻骨铭心

如果你觉得有用,记得点击右下角“在看”按钮,并写下宝贵的意见,也可在公众号下扫码加群

欲见详情,静候下文

原创文章欢迎转载!

请注明:本文首发于

"数字化审计"公众号

sql两个数字之差取最接近的_从零学DAX/Sql/Python030203SQL数据分类汇总续篇相关推荐

  1. windy定义了一种windy数,不含前导零且前两个数字只差至少为2的正整数被称为windy数,求A和B之间windy数的个数

    windy数(java) 输入1 10 输出 9 输入25 50 输出 20 dp[i][j] 表示第i位的数为j 那么 dp[i][j]=dp[i-1][k] abs(j-k)>=2 初始值 ...

  2. sql group by 取每组符合条件_从零学SQL-经典面试题

    面试训练题根据数据库school来练习,其中四个表数据如下: 一.简单查询 面试官:查询姓"猴"的学生名单. 面试官:查询姓名中最后一个字是"猴"的学生名单. ...

  3. Python爬取网站用户手机号_主流网站 Python 爬虫模拟登陆方法汇总

    欢迎关注我的公众号:高级农民工,博客:高级农民工,阅读体验更好. 摘要:介绍微信.知乎.新浪等一众主流网站的模拟登陆爬取方法. 网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样.从 ...

  4. oracle 取整点的数据,Oracle SQL语句操作数字:取整、四舍五入及格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  5. oracle 数字格式取整,Oracle SQL语句操作数字:取整、四舍五入及格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  6. oracle sql查询取整,Oracle SQL语句操作数字:取整、四舍五入及格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  7. 编写一个函数,计算两个数字的和,差,积,商

    1 编写一个函数,计算两个数字的和.差.积.商 要求:使用传参的形式 function demo(num1, num2) { console.log(num1 + num2); console.log ...

  8. oracle sql 相除取整数,Oracle SQL语句实现数字四舍五入取整

    Oracle SQL语句实现数字四舍五入取整 取整(向下取整): 复制代码 代码如下: select floor(5.534) from dual; select trunc(5.534) from ...

  9. 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)

    题目:合并数字 消除相邻的差的绝对值为1的两个数中较大的那一个.这一天,她得到了 m 个数字,她只能选出最左边的相邻的差的绝对值为 1 的两个数,保留较小的数,泯灭较大的数,直到没有两个相邻的差的绝对 ...

最新文章

  1. 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow 3.1PlayGround
  2. mysql 重启失败,重启MySQL服务失败
  3. redis-4.0.10集群安装(3台机器,6个node),以及在Spring项目中的集成,redis操作工具类
  4. PHP商城数据库安全事务处理方法
  5. enum 有什么好处_林卡尔|先买地板后装修的三大好处
  6. 网络版库存管理系统如何共享库存信息
  7. 强化学习之Q函数的个人理解
  8. 618运动好物清单、必买运动装备推荐
  9. 851-40亿个号码如何去重?
  10. android pppd log,未记录的pppd退出代码
  11. pythonl list 的修改元素
  12. ubuntu打不开了怎么办_Ubuntu 16.04的Software center打不开的解决办法
  13. 【每天听见吴晓波-2016-07-04】上海房价未来五年还会翻番
  14. 1.PWM基本概念了解
  15. 基于51单片机的AD转换
  16. Error Calling Method of a PBNI object 的问题现象及解决方案
  17. 安裝oracle坑之---安装界面乱码,全都是框框
  18. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式
  19. java argument是什么_第2期:argument、parameter以及option有什么区别?
  20. 在Authorware中插入PowerPoint演示文稿的实现方法

热门文章

  1. Linux 之五 最新 2021 一图看尽 Linux 发行版
  2. 王爽 16 位汇编语言学习记录
  3. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算
  4. VS编译提示错误“....Consider using strcat_s instead.To disable deprecation, use _CRT_SECURE_NO_WARNINGS.”
  5. MySQL / schema的概念
  6. exit()、_Exit() 和 _exit() 函数的区别和联系
  7. python ssl连接 证书验证失败_即使在添加CA证书之后,Python也会请求SSL证书验证失败...
  8. 9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes
  9. php forms 上传更新json_通达OA任意文件上传漏洞详细分析
  10. rpc 调用webservice怎样传递参数_五分钟让你了解RPC原理详解