【问题标题】:SQL - I need a query to bucket orders by customers into groupings of order sizes 1 to 10 by order day. Each invoice can have 1 to 10 orders on itSQL - 我需要一个查询来将客户的订单按订单日分为 1 到 10 的订单大小分组。每张发票上可以有 1 到 10 个订单
【发布时间】:2021-04-19 13:58:44
【问题描述】:

我想运行一个查询,该查询将在给定日期按客户 ID 对给定发票编号开具发票的项目数进行计数。每张发票最多可以有 10 个项目的发票。我想知道传播是什么。发票订单中包含的 10 个项目的全部计数的次数,然后是单个发票上只有 9、8、7、6、5、4、3、2 和 1 个项目的后续总数对于给定的客户。

我的数据如下所示(客户发票表)

Order Date MMDDYYYY | Customer Id | Invc Num  | Item Sku 
 04/01/2021          1                 01      11111

 04/01/2021          2                 02      11112
 04/01/2021          2                 03      11113
 04/01/2021          2                 04      11111

 04/02/2021          3                 05      11112
 04/02/2021          3                 05      11113
 04/02/2021          3                 05      11114
 04/02/2021          3                 06      11115

 04/03/2021          3                 07      11117
 04/03/2021          3                 07      11118

 04/03/2021          4                 08      11114
 04/03/2021          4                 09      11120
 04/03/2021          4                 09      11121
 04/03/2021          4                 09      11122
 04/03/2021          4                 09      11123
 04/03/2021          4                 09      11124
 04/03/2021          4                 09      11125
 04/03/2021          4                 09      11126
 04/03/2021          4                 09      11127
 04/03/2021          4                 09      11128
 04/03/2021          4                 09      11129

预期结果:

Order Date MMDDYYYY | Customer Id | Bucket 1 | Bucket 2 | Bucket 3 | Bucket 4 | Bucket 5 | Bucket 6 | Bucket 7 | Bucket 8 | Bucket 9 | Bucket 10 | Total Items Ordered
     04/01/2021     |      1      |    1     |     0    |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0      |       1
     04/01/2021     |      2      |    3     |     0    |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0      |       3
     04/02/2021     |      3      |    1     |     0    |    1     |    0     |    0     |    0     |    0     |    0     |    0     |    0      |       4
     04/03/2021     |      3      |    0     |     1    |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0      |       2
     04/03/2021     |      4      |    1     |     0    |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    10     |      11

到目前为止,我的 SQL 如下所示: 选择 order_date、customer_id、invc_num、count(invc_num) 来自 customer_invoice_table 按 order_date、customer_id、invc_num 分组

当然,这只会给我订购的总物品数。我无法弄清楚如何获得各个桶。我可以通过计算单个 invc_num 在给定日期为同一客户出现的次数,在电子表格中手动执行此操作,但我无法弄清楚如何将其公式化为 sql 语句以给我分组在每个中的总订单桶。

对此有什么想法吗?

【问题讨论】:

  • 标记您的问题以指示 RDBMS。
  • 您需要将每张发票中的项目作为内部集进行计数,然后将计数的项目作为外部集旋转到存储桶中。

标签: sql group-by bucket


【解决方案1】:

如果我理解正确,您需要计算每个客户每天每张发票出现的次数。为此,您可以使用两个级别的聚合。然后,您希望该计数跨“桶”列旋转

select order_date, customer_id, sum(cnt) as num_invoices,
       sum(case when cnt = 1 then 1 else 0 end) as bucket_1,
       sum(case when cnt = 2 then 1 else 0 end) as bucket_2,
       sum(case when cnt = 3 then 1 else 0 end) as bucket_3,
       . . .
from (select order_date, customer_id, invc_num, count(*) as cnt
      from customer_invoice_table
      group by order_date, customer_id, invc_num
     ) t
group by order_date, customer_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多