首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL 订单揽收统计

SQL 订单揽收统计

作者头像
白日梦想家
发布2020-08-12 14:55:27
发布2020-08-12 14:55:27
1.6K0
举报
文章被收录于专栏:SQL实现SQL实现

问题描述

有一张揽收表 t,它用来记录发给客户的货物的运单号。

t 表结构:

字段

类型

描述

track_no

String

运单号

customer_id

String

客户ID

created_date

Date

创建日期

要求:

统计 2020 年 7 月份的客户的单量分布情况。

最终展示的效果数据如下:

代码语言:javascript
复制
单量  客户数
------  --------
0-5   10000
6-10  2000
11-20  1200
20以上 800

解决方案

要想统计单量,就得先知道每个客户在 2020 年 7 月份的运单数。

创建日期在这里只是起到了过滤数据的作用,我们先把 2020 年 7 月份的数据捞出来。

代码语言:javascript
复制
SELECT
  *
FROM
  t
WHERE created_date BETWEEN '2020-07-01'
  AND '2020-07-31'

接着在这个基础上统计每个客户的单量,统计的结果存到临时表 tt 中。

代码语言:javascript
复制
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 做到,最后再依据标记字段分组统计。

代码语言:javascript
复制
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 如下:

代码语言:javascript
复制
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上发布。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档