专栏首页SQL实现SQL 订单揽收统计

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上发布。

本文分享自微信公众号 - SQL实现(gh_684ee9235a26),作者:zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL 计算小计和总计

    有一个完美的解决方案是使用 GROUP BY 子句的 ROLLUP 扩展。ROLLUP 在分组统计的基础上,再对结果进行相同操作(SUM、AVG、COUNT)的...

    白日梦想家
  • SQL 找出分组中具有极值的行

    你可能也遇到过这种需求:找出每个部门入职最早的员工的信息;获取每个科目最高分的学生信息;获取用户最近一次的完整登录信息。

    白日梦想家
  • SQL 计算公司的期初资产

    这是来自群友的一个需求,有一张资产表 assets,用来记录每个公司在每个季度结束时的资产信息。

    白日梦想家
  • 20亿分手费!高通是“心”痛,还是“芯”痛?

    美国时间7月25日,因在截止日期之前未获得中国商务部审批,高通宣布放弃收购恩智浦,启动不超过300亿美元股票回购计划。

    镁客网
  • 关于词向量

    参考论文:Efficient Estimation of Word Representations in Vector Space

    张凝可
  • 高通Q1财报净利降13%,还将涉嫌5G射频芯片垄断

    高通(NASDAQ:QCOM)在美股市场周三收盘以后(北京时间周四凌晨)公布了该公司的2020财年第一季度财报,营收超预期,且Q2展望超预期。财报发布后,高通股...

    SDNLAB
  • R语言绘制群落物种累积曲线

    物种累积曲线(Species accumulation curves,SAC),用于估计特定区域中的物种数量。物种累积曲线反映的是抽样个数对物种多样性的影响,当...

    用户7585161
  • 高通创始人之子再谈私有化,称公司问题频发

    据彭博社报道,在今天接受采访时,高通前董事长Paul Jacobs又一次提及他仍有意将公司私有化。他表示,他一直在观察高通的动态,还指出公司面临着法律问题,致使...

    镁客网
  • 午时已到,中国没同意!美国高通的史上最大芯片并购案黄了,赔款20亿美元

    最后的截止时间到来,全世界都在等中国的官方消息,然而一遍遍刷新,最后依旧什么也没有。

    量子位
  • 苹果与高通大战,iPhone XS要成绝版?

    就在前几日,高通苹果事件可谓是闹得沸沸扬扬。在这件事中,苹果可算是吃了亏,最后落得个好多款产品都被禁售的结果。

    谭庆波

扫码关注云+社区

领取腾讯云代金券