【面试题】

有一张“快递揽收表”,包含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 连表)相关推荐

  1. 普通平键的主要尺寸有_快来收下这份家装尺寸表,衣柜不再鸡肋

    有些人在装修的时候还把思想停留在户型决定一切的理念.户型的好坏对于我们的家装效果固然重要.但是好的装修效果离不开户型和格局布局设计的相辅相成.空间布局的设计其实和硬装没有太大的关系,几乎是由家具的摆放 ...

  2. 比 SQL 快好多倍,这个国产数据库真强!

    SPL 作为专门用于结构化和半结构化数据的处理技术,在实际应用时经常能比 SQL 快几倍到几百倍,同时代码还会短很多,尤其在处理复杂计算时优势非常明显.用户在看到这些应用效果后对 SPL 往往很感兴趣 ...

  3. 比SQL快几倍到几百倍,这个国产数据库技术真的强!

    SPL 作为专门用于结构化和半结构化数据的处理技术,在实际应用时经常能比 SQL 快几倍到几百倍,同时代码还会短很多,尤其在处理复杂计算时优势非常明显.用户在看到这些应用效果后对 SPL 往往很感兴趣 ...

  4. 送快递的,收快递的电话

    http://hot.dahangzhou.com/top/express/index.htm#006 送快递的,收快递的电话 十佳快递公司品牌榜上榜-快运品牌排名(2009) 想了解更多品牌排名请登 ...

  5. 【源码分享】ASP.NET大型快运(快递)管理系统带完整文档

    ASP.NET大型快运(快递)管理系统源码带完整文档 大型快递(快运)管理系统基于webservice的分布式系统,集成快递物流业务流程管理,快递物流公司内部管理,快递物流单全网跟踪监控,并集成基于w ...

  6. ASP.NET大型快运(快递)ERP系统带完整文档【源码分享】

    ASP.NET大型快运(快递)管理系统源码带完整文档 源码分享,需要源码学习参考可私信我. 大型快递(快运)管理系统基于webservice的分布式系统,集成快递物流业务流程管理,快递物流公司内部管理 ...

  7. 快运和快递有哪些区别

    快运和快递在现代社会都是很普遍的词汇,由于现如今很多物流公司服务业务繁多,其中就包括快运和快递.消费者只知道自己能够把包裹寄往自己的目的地,但是并不清楚自己是通过快递还是快运进行运输,对两者的概念非常 ...

  8. SQL语句行列转换两种方法 case ...when 和pivot函数应用

    2019独角兽企业重金招聘Python工程师标准>>> SQL语句行列转换两种方法 case ...when 和pivot函数应用SQL语句行列转换两种方法 case ...when ...

  9. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

最新文章

  1. Spring 整合 CXF
  2. 数据结构 线性存储 -- 栈 讲解
  3. 13道BGP属性面试题
  4. 全球及中国语音拾音耳机行主要产品及营销模式分析报告业2022-2028年版
  5. keystore文件_如何手动给APK文件签名
  6. ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码
  7. GeForce 硬件 技术 VXGI
  8. C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
  9. 5G + 云网融合,加速万物互联
  10. simscape multibody仿真报错装配位置_大型结构件虚拟装配仿真软件,三维数字化分析,现场直接调整...
  11. CCF NOI1139 高精度减法
  12. mysql 1045 - Access denied for user 'root'@'*.*.*.*' (using password YES)
  13. 卷积码编码和译码c语言,卷积码编码和译码.doc
  14. python 拼音排序_Python实现针对中文排序的方法
  15. OL3+中链家地图找房功能实现
  16. 为什么用CDN给你网站加速?
  17. 人教版,北师大版,北京版和苏教版的四年级数学知识点对比(附视频)
  18. 如何做好项目的验收工作?
  19. Games101-课程15笔记
  20. [JZOJ5666]【GDOI2018Day2模拟4.18】法力风暴(分治NTT 模板)

热门文章

  1. android毕业设计——基于Android+Java+Python的手机端办公自动化OA系统设计与实现(毕业论文+程序源码)——办公自动化OA系统
  2. 谷歌创始人布林:Android和Chrome未来或合并
  3. 2022年P气瓶充装考试内容及P气瓶充装模拟试题
  4. 虚拟机中Ubuntu连不上网问题已解决
  5. 计算机视觉技术与应用概论,8计算机视觉概论2010.pdf
  6. OpenGL学习笔记(5)3D基本概念
  7. 2018你应该知道的Web性能信息采集指南
  8. Photoshop制作个性的透明玻璃网页用户信息
  9. Android视频学习(二):数据存储与界面展示2
  10. 创建用户tea,stu,并给这两个用户resource,connect角色