问题如下,我需要输入(可以保存到数据库或csv文件,excel文件等),我试图用MySQL解决问题,因为同一订单可能有多个产品,它们将分支。而且同一产品在不同订单中的情况也不一样,这给我带来了很大的挑战。如果一位伟大的上帝可以帮助我,非常感谢。

input:

Orderid   Itemid    Quantity
001         a1       1
001         a2       1
002         a1       1
003         a1       1
003         a2       1
004         a1       1
005         a1       3
006         a2       1
007         a1       1
008         a1       1

output:

ordersum  percent   Cumulative   itemdetail
4        50.00%    50.00%      a1[1]
2        25.00%    75.00%      a1[1]a2[1]
1        12.50%    87.50%      a1[3]
1        12.50%    100.00%     a2[1]


我一直在写一个下午。统计结果不是很令人满意。请注意,我描述的问题字段与原始表字段不同。我的想法如下:

SET @csum: = 0;
select order volume, shop proportion, concat (round ((@ csum: = @csum + shop proportion), 2), '', '%') cumulative proportion, shop name
from
(select t1.store name, t1.order quantity, concat (round (t1.order quantity / t2.ordersum * 100,2), '', '%')
from
(select shop shop name, count (distinct (order number)) order quantity
from order20190801
group by shop
order by count (distinct (order number)) desc) t1,
(select count (distinct (order number)) ordersum
from order20190801) t2) t3


5.8秒左右有点长! !!

最佳答案

SET @csum := 0;
select 订单量,
concat(round(订单量 / 订单总量* 100 ,5),'','%') 订单占比,
concat(round(@csum := @csum + concat(round(订单量 / 订单总量* 100 ,5),'','%'),5),'','%') AS 累计占比 ,
订单明细
from(
		select count(订单明细) 订单量,订单明细
		from (
				select 订单编号,GROUP_CONCAT(商家编码,'|',货品数量) 订单明细
				from order20190801
				group by 订单编号
				)t1
		group by 订单明细
		order by  count(订单明细) desc
		)t2,(select count(distinct(订单编号)) 订单总量 from order20190801
		)t3

#10.437秒!!!





解决我自己的问题,但是执行时间比较长,如果有优化建议,我将不胜感激

10-04 16:03