SQL快出来,收快递啦(分区,case when 连表)
【面试题】
有一张“快递揽收表”,包含3列:运单号、客户id、创建日期。
问题:查询运单创建日期在0501-0531期间不同单量区间的客户分布。最终得出的数据如下:
【解题步骤】
1. 汇总分析
计算0501-0531期间每个客户的单量,涉及到“每个”,要想到《猴子 从零学会SQL》里讲过的用分组汇总来解决这类问题。按“客户id”分组,对“运单号”统计数目得到单量(count),注意要用distinct对运单号去重
select 客户id,count(distinct 运单号) as 单量
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’
group by 客户id;
2. 子查询
在上一步的基础上,还无法得到要求的“最终结果”。因为,“最终结果”里面获取的是不同单量区间的客户数量分布。
所以,还要在上一步的基础上(作为子查询)获取不同客户所处的单量区间。不同区间这种问题怎么办呢?
要想到《猴子 从零学会SQL》里讲过的多条件判断,也就是用到case语句。
select 客户id,单量,(case when 单量 <= 5 then ‘0-5’when 单量 >= 6 and 单量 <= 10 then ‘6-10’when 单量 >= 11 and 单量 <= 20 then ‘11-20’else ‘20以上’ end) as 单量区间
from
(
select 客户id,count(distinct 运单号) as 单量
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’
group by 客户id
) as t1;
但是和最终结果对比发现,还需要得到客户数,怎么办?
在上一步查询结果的基础上(作为子查询),再使用一次汇总分析,按“单量区间”分组(group by),对客户id汇总得到客户数(count)。
select 单量区间 as 单量,count(distinct 客户id) as 客户数
from
(
select 客户id
,单量
,case when 单量 <= 5 then ‘0-5’when 单量 >= 6 and 单量 <= 10 then ‘6-10’
when 单量 >= 11 and 单量 <= 20 then ‘11-20’
else ‘20以上’ end as 单量区间
from
(
select 客户id
,count(distinct 运单号) as 单量
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’
group by 客户id
) as t1
) as t2
group by 单量区间;
【本题考点】
1.当遇到“每个”这类问题,要想到用分组汇总或者窗口函数
2.考查对子查询的灵活使用,嵌套了两次子查询,也就是把上一步查询结果作为子查询
3.考查对常见函数的了解:count()、group by()、distinct、case when,以及它们的组合使用
4.当遇到“区间”问题的时候,要想到用多条件判断(case语句)解决
5.考察遇到业务问题,如何用逻辑树分析方法把复杂问题变成矿业解决的子问题
【举一反三】
查询运单创建日期在0501-0531期间不同单量区间的客户占比。
与原答案的区别是:最终查询的结果是客户占比。
所以,需要查询客户总数;然后使用多表查询来计算客户占比。
select count(distinct 客户id) as 客户总数
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’;
将原答案与“客户总数”联结,同时使用concat()函数将小数转化成百分数。
select a.单量,concat(round(a.客户数/b.客户总数,4)*100,’%’) as 客户占比
from
(
select 单量区间 as 单量
,count(distinct 客户id) as 客户数
from
(
select 客户id
,单量
,case when 单量 <= 5 then ‘0-5’when 单量 >= 6 and 单量 <= 10 then ‘6-10’
when 单量 >= 11 and 单量 <= 20 then ‘11-20’
else ‘20以上’ end as 单量区间
from
(
select 客户id
,count(distinct 运单号) as 单量
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’
group by 客户id
) as t1
) as t2
group by 单量区间
) as a
left join
(
select count(distinct 客户id) as 客户总数
from 快递揽收表
where 创建日期 >= ‘2020-05-01’ and 创建日期 <= ‘2020-05-31’
) as b
on 1 = 1;
转载于公众号:猴子数据分析
SQL快出来,收快递啦(分区,case when 连表)相关推荐
- 普通平键的主要尺寸有_快来收下这份家装尺寸表,衣柜不再鸡肋
有些人在装修的时候还把思想停留在户型决定一切的理念.户型的好坏对于我们的家装效果固然重要.但是好的装修效果离不开户型和格局布局设计的相辅相成.空间布局的设计其实和硬装没有太大的关系,几乎是由家具的摆放 ...
- 比 SQL 快好多倍,这个国产数据库真强!
SPL 作为专门用于结构化和半结构化数据的处理技术,在实际应用时经常能比 SQL 快几倍到几百倍,同时代码还会短很多,尤其在处理复杂计算时优势非常明显.用户在看到这些应用效果后对 SPL 往往很感兴趣 ...
- 比SQL快几倍到几百倍,这个国产数据库技术真的强!
SPL 作为专门用于结构化和半结构化数据的处理技术,在实际应用时经常能比 SQL 快几倍到几百倍,同时代码还会短很多,尤其在处理复杂计算时优势非常明显.用户在看到这些应用效果后对 SPL 往往很感兴趣 ...
- 送快递的,收快递的电话
http://hot.dahangzhou.com/top/express/index.htm#006 送快递的,收快递的电话 十佳快递公司品牌榜上榜-快运品牌排名(2009) 想了解更多品牌排名请登 ...
- 【源码分享】ASP.NET大型快运(快递)管理系统带完整文档
ASP.NET大型快运(快递)管理系统源码带完整文档 大型快递(快运)管理系统基于webservice的分布式系统,集成快递物流业务流程管理,快递物流公司内部管理,快递物流单全网跟踪监控,并集成基于w ...
- ASP.NET大型快运(快递)ERP系统带完整文档【源码分享】
ASP.NET大型快运(快递)管理系统源码带完整文档 源码分享,需要源码学习参考可私信我. 大型快递(快运)管理系统基于webservice的分布式系统,集成快递物流业务流程管理,快递物流公司内部管理 ...
- 快运和快递有哪些区别
快运和快递在现代社会都是很普遍的词汇,由于现如今很多物流公司服务业务繁多,其中就包括快运和快递.消费者只知道自己能够把包裹寄往自己的目的地,但是并不清楚自己是通过快递还是快运进行运输,对两者的概念非常 ...
- SQL语句行列转换两种方法 case ...when 和pivot函数应用
2019独角兽企业重金招聘Python工程师标准>>> SQL语句行列转换两种方法 case ...when 和pivot函数应用SQL语句行列转换两种方法 case ...when ...
- mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法
需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性, CASE ...
最新文章
- Spring 整合 CXF
- 数据结构 线性存储 -- 栈 讲解
- 13道BGP属性面试题
- 全球及中国语音拾音耳机行主要产品及营销模式分析报告业2022-2028年版
- keystore文件_如何手动给APK文件签名
- ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码
- GeForce 硬件 技术 VXGI
- C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
- 5G + 云网融合,加速万物互联
- simscape multibody仿真报错装配位置_大型结构件虚拟装配仿真软件,三维数字化分析,现场直接调整...
- CCF NOI1139 高精度减法
- mysql 1045 - Access denied for user 'root'@'*.*.*.*' (using password YES)
- 卷积码编码和译码c语言,卷积码编码和译码.doc
- python 拼音排序_Python实现针对中文排序的方法
- OL3+中链家地图找房功能实现
- 为什么用CDN给你网站加速?
- 人教版,北师大版,北京版和苏教版的四年级数学知识点对比(附视频)
- 如何做好项目的验收工作?
- Games101-课程15笔记
- [JZOJ5666]【GDOI2018Day2模拟4.18】法力风暴(分治NTT 模板)
热门文章
- android毕业设计——基于Android+Java+Python的手机端办公自动化OA系统设计与实现(毕业论文+程序源码)——办公自动化OA系统
- 谷歌创始人布林:Android和Chrome未来或合并
- 2022年P气瓶充装考试内容及P气瓶充装模拟试题
- 虚拟机中Ubuntu连不上网问题已解决
- 计算机视觉技术与应用概论,8计算机视觉概论2010.pdf
- OpenGL学习笔记(5)3D基本概念
- 2018你应该知道的Web性能信息采集指南
- Photoshop制作个性的透明玻璃网页用户信息
- Android视频学习(二):数据存储与界面展示2
- 创建用户tea,stu,并给这两个用户resource,connect角色