Mysql 需要帮助对可用订单明细表进行分组,以获得计数(订单行项目)、数量和计数(数量)的分布
我有一个包含以下信息的订单表 订单ID、产品ID、订购数量Mysql 需要帮助对可用订单明细表进行分组,以获得计数(订单行项目)、数量和计数(数量)的分布,mysql,sql,mysql-workbench,sequelpro,Mysql,Sql,Mysql Workbench,Sequelpro,我有一个包含以下信息的订单表 订单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`
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
我还想找到订单\行\项目级别的数量分布
即有多少订单有一个行项目,有一个数量的项目,两个数量的项目,等等,类似的
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
我应该在上面的查询中做什么修改来实现这个查询
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`
演示:
如果您的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`
演示:尝试此查询
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`
演示:
如果您的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`
演示:您的样本数据似乎与描述不一致。我现在已更新了描述,请建议进行修改以到达样本输出表。列名仍然没有正确对齐。请修复。当然,感谢您的编辑建议,我已经更新了说明中的列名,并且@TimBiegeleisen输出表请告诉我是否需要我的进一步输入以获得此查询的帮助。您的示例数据似乎与说明不符。我现在已经更新了说明,请建议进行修改,以到达样本输出表。列名仍然没有正确对齐。请修复。当然,感谢您的编辑建议,我已经更新了描述中的列名,并且输出表@TimBiegeleisen请告诉我是否需要我的进一步输入来获取此查询的帮助@krokodilko感谢您的回答,但是当我为我的表运行此命令时,我得到了错误------您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用near'(按
OID划分)作为第3行的计数项目、Qty
F'的正确语法--------由于它在fiddle@sakura01您的mysql版本是8.0ok之前的版本,我不知道,谢谢,在这种情况下该怎么办@strawberry我已经在我的回答中添加了一个新的查询,用于小于8的版本谢谢@krokodilko这对我来说非常有效!:)上帝保佑你!谢谢您的回答@krokodilko,但是当我为我的表运行这个时,我得到了一个错误------您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解使用near'(按OID划分)作为第3行的计数项目、Qty
F'的正确语法--------由于它在fiddle@sakura01您的mysql版本是8.0ok之前的版本,我不知道,谢谢,在这种情况下该怎么办@strawberry我已经在我的回答中添加了一个新的查询,用于小于8的版本谢谢@krokodilko这对我来说非常有效!:)上帝保佑你!