需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布

Posted

技术标签:

【中文标题】需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布【英文标题】:Need help to group the available order details table to arrive at the distribution of count(order_line_item) , Qty and count(Qty) 【发布时间】:2020-06-11 05:56:43 【问题描述】:

我有一个包含以下信息的订单表

订单 ID、产品 ID、订购数量

OID PID Qty
1   10  1
1   20  2
2   10  2
2   40  4
3   50  1
3   20  3
4   30  1
4   90  2
4   90  5
5   10  2
5   20  2
5   70  5
5   60  1
6   80  2

如果我运行以下查询

select `Qty`, count(`Qty`) 
from `table`
group by `Qty`

我得到表中数量的分布,即

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

我也想在 order_line_item 级别找到数量分布

这是有多少订单有一个订单项,有 1 个数量的项目,2 个数量的项目,等等一个,像

Count(Order_line_item)    Qty        Count(Qty)
1                         2          1
2                         1          2
2                         2          2
2                         3          1
2                         4          1
3                         1          1
3                         2          1
3                         5          1
4                         1          1
4                         2          2
4                         5          1

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

【问题讨论】:

您的示例数据似乎与描述不符。 我已经更新了描述,请提出修改以到达示例输出表 列名仍然没有正确排列。请修复。 当然,感谢您的编辑建议,我已经更新了描述中的列名和输出表@TimBiegeleisen 请让我知道是否需要进一步输入以获取有关此查询的帮助 【参考方案1】:

试试这个查询

SELECT  count_order_line_items, `Qty`, count(*)
FROM (
   SELECT count(*) over (partition by `OID`) as count_order_line_items,
         `Qty`
   FROM Table1
) x
GROUP BY count_order_line_items, `Qty`

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=07dfb27a7d434eca1f0b9641aadd53c8

如果你的mysql版本低于8,那么试试这个

SELECT count_order_line_items, `Qty`, count(*)
FROM Table1 t1
JOIN (
   SELECT `OID`, count(*) as count_order_line_items
   FROM Table1
   GROUP BY `OID`
) t2 ON t1.`OID` = t2.`OID`
GROUP BY count_order_line_items, `Qty`

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

【讨论】:

感谢您的回答@krokodilko,但是当我为我的表运行此程序时,我收到错误 --------- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '(partition by OID) as count_order_line_items, Qty F' 附近使用正确的语法------------ 可能造成这种情况,因为它正在小提琴中工作 @sakura01 你的mysql版本是pre 8.0 好的,我不知道,谢谢,在这种情况下可以做什么@Strawberry 我在我的答案中添加了一个低于 8 版本的新查询 谢谢@krokodilko,这对我来说非常有用! :) 上帝保佑你!

以上是关于需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布的主要内容,如果未能解决你的问题,请参考以下文章

FR 8.0 主子报表的错误

根据跨日期范围对订单进行分组

mssql sqlserver 对不同群组对象进行聚合计算的方法分享

如何对数据进行分组以从选择查询中按周显示平均价格

开发版速达扩展功能-提供单据条码打印

根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小