SQL 订单揽收统计
时间:2022-07-23
本文章向大家介绍SQL 订单揽收统计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述
有一张揽收表 t,它用来记录发给客户的货物的运单号。
t 表结构:
字段 |
类型 |
描述 |
---|---|---|
track_no |
String |
运单号 |
customer_id |
String |
客户ID |
created_date |
Date |
创建日期 |
要求:
统计 2020 年 7 月份的客户的单量分布情况。
最终展示的效果数据如下:
单量 客户数
------ --------
0-5 10000
6-10 2000
11-20 1200
20以上 800
解决方案
要想统计单量,就得先知道每个客户在 2020 年 7 月份的运单数。
创建日期在这里只是起到了过滤数据的作用,我们先把 2020 年 7 月份的数据捞出来。
SELECT
*
FROM
t
WHERE created_date BETWEEN '2020-07-01'
AND '2020-07-31'
接着在这个基础上统计每个客户的单量,统计的结果存到临时表 tt 中。
SELECT
customer_id,
COUNT(*) AS quantity
FROM
t
WHERE created_date BETWEEN '2020-07-01'
AND '2020-07-31'
GROUP BY customer_id
知道了每个客户的单量,根据单量分组的规则,在统计出来客户的单量的结果里加一个字段标记所在行属于哪个组。标记的操作可通过 case when
做到,最后再依据标记字段分组统计。
SELECT
quantity_level AS '单量',
COUNT(customer_id) AS '客户数'
FROM
(SELECT
customer_id,
quantity,
CASE
WHEN quantity <= 5
THEN '0-5'
WHEN quantity <= 10
THEN '6-10'
WHEN quantity <= 20
THEN '11-20'
ELSE '20以上'
END AS quantity_level
FROM
tt) a
GROUP BY quantity_level
上面的 SQL 已经能把每个单量所对应的客户给统计出来了,但由于分组的字段是一个字符串类型,结果所展示的顺序并不是我们想要的。
稍微改一下 SQL ,分组的字段用一个数值类型的数字代替,最终展示的时候再把数字翻译成字符串。最终的 SQL 如下:
SELECT
CASE
quantity_level
WHEN 1
THEN '0-5'
WHEN 2
THEN '6-10'
WHEN 3
THEN '11-20'
ELSE '20以上'
END AS '单量',
COUNT(customer_id) AS '客户数'
FROM
(SELECT
customer_id,
quantity,
CASE
WHEN quantity <= 5
THEN 1
WHEN quantity <= 10
THEN 2
WHEN quantity <= 20
THEN 3
ELSE 4
END AS quantity_level
FROM
tt) a
GROUP BY quantity_level
ORDER BY quantity_level
封面图片由Paolo Chieselli在Pixabay上发布。
- 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult
- 学习SVM(五)理解线性SVM的松弛因子
- 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult
- 可视化(番外篇)——SWT总结
- 新年必看!预测2018年将是区块链爆发的行情
- 探秘Tomcat(一)——Myeclipse中导入Tomcat源码
- 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
- Hadoop阅读笔记(七)——代理模式
- 认识ASP.NET MVC的5种AuthorizationFilter
- 2017十大“最差”密码出炉
- SVG图形绘制入门第一弹
- 使用自定义标记来构建页面
- ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android实现面包屑功能的代码(支持Fragment联动)
- Android自定义带动画效果的圆形ProgressBar
- Android App启动图启动界面(Splash)的简单实现代码
- WordPress头部去除window._wpemojiSettings代码
- Android小程序实现选项菜单
- Linux VPS安装Google Authenticator实现SSH登陆二次验证
- Android小程序实现访问联系人
- Android小程序实现切换背景颜色
- 浅析Android加载字体包及封装的方法
- android实现滑动标签页效果的代码解析
- Android PC端用ADB抓取指定应用日志实现步骤
- Android studio 禁用AndroidX方式
- Android 实现把bitmap图片的某一部分的颜色改成其他颜色
- AndroidStudio构建项目提示错误信息“unable to find valid certification”的完美解决方案
- Android自定义View实现抖音飘动红心效果