需要帮助对可用的order details表进行分组,以得到count(order\u line\u item)、qty和count(qty)的分布

uurv41yg  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(463)

我有一张订货单,上面有以下信息
订单id、产品id、订购数量

  1. OID PID Qty
  2. 1 10 1
  3. 1 20 2
  4. 2 10 2
  5. 2 40 4
  6. 3 50 1
  7. 3 20 3
  8. 4 30 1
  9. 4 90 2
  10. 4 90 5
  11. 5 10 2
  12. 5 20 2
  13. 5 70 5
  14. 5 60 1
  15. 6 80 2

如果我运行以下查询

  1. select `Qty`, count(`Qty`)
  2. from `table`
  3. group by `Qty`

我得到了表中数量的分布,这是

  1. Qty count(`Qty`)
  2. 1 4
  3. 2 6
  4. 3 1
  5. 4 1
  6. 5 2

我还想找出订单\行\项目级别的数量分布
也就是说,有多少订单有一个行项目,有1个数量的项目,2个数量的项目,等等

  1. Count(Order_line_item) Qty Count(Qty)
  2. 1 2 1
  3. 2 1 2
  4. 2 2 2
  5. 2 3 1
  6. 2 4 1
  7. 3 1 1
  8. 3 2 1
  9. 3 5 1
  10. 4 1 1
  11. 4 2 2
  12. 4 5 1

我应该在上面的查询中做什么修改来实现这一点

qij5mzcb

qij5mzcb1#

尝试此查询

  1. SELECT count_order_line_items, `Qty`, count(*)
  2. FROM (
  3. SELECT count(*) over (partition by `OID`) as count_order_line_items,
  4. `Qty`
  5. FROM Table1
  6. ) x
  7. GROUP BY count_order_line_items, `Qty`

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=07dfb27a7d434eca1f0b9641aadd53c8
如果你的mysql版本低于8,那么试试这个

  1. SELECT count_order_line_items, `Qty`, count(*)
  2. FROM Table1 t1
  3. JOIN (
  4. SELECT `OID`, count(*) as count_order_line_items
  5. FROM Table1
  6. GROUP BY `OID`
  7. ) t2 ON t1.`OID` = t2.`OID`
  8. GROUP BY count_order_line_items, `Qty`

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=28c291a4693f31029a103f5c41a97d77

展开查看全部

相关问题