所以在我的数据库中我有两行:Barcode,Profit; 根据利润,它们按降序排列,例如:
Barcode , Profit:
101 , 10000
106 , 9999
107 , 8888
108 , 222
我需要sql查询,它将执行以下操作: 我需要总结所有利润,然后查看其%80值,然后开始汇总条形码值,直到满足%80,例如:
Barcode , Profit:
101 , 10000
106 , 9999
107 , 8888
108 , 222
10000 + 9999 + 8888 + 222 = 29109
29109是总和,其%80 = 23 287,2
由于10000 + 9999 + 8888确实包含%80,结果应返回:
Barcode
101
106
107
答案 0 :(得分:2)
您可以使用变量执行此操作:
select t.*
from (select t.*, (@sump := @sump + profit) as running_profit
from t cross join
(select @sump := 0) params
order by profit desc
) t
where running_profit < 0.8 * @sump;
内部查询计算累积利润。作为副作用,它还计算利润的总和。
外部where
选择第一行之前超过80%阈值的所有行。