需要帮助对可用的订单明细表进行分组以得出 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 byOID
) as count_order_line_items, Qty
F' 附近使用正确的语法------------ 可能造成这种情况,因为它正在小提琴中工作
@sakura01 你的mysql版本是pre 8.0
好的,我不知道,谢谢,在这种情况下可以做什么@Strawberry
我在我的答案中添加了一个低于 8 版本的新查询
谢谢@krokodilko,这对我来说非常有用! :) 上帝保佑你!以上是关于需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布的主要内容,如果未能解决你的问题,请参考以下文章