Sql 达到最佳性能的总用户百分比
我想获得仓库中物品/用户的百分比(仅限缺货的物品) 所以我必须得到: 经理id=237->0,25->25% 经理id=89->0,25->25% 总计->0,50->50% 我的第一个想法是这样的:Sql 达到最佳性能的总用户百分比,sql,oracle,Sql,Oracle,我想获得仓库中物品/用户的百分比(仅限缺货的物品) 所以我必须得到: 经理id=237->0,25->25% 经理id=89->0,25->25% 总计->0,50->50% 我的第一个想法是这样的: select skk.manger_id, count(*), count(skk.item_id/sk.item_id) as prcntg from stock skk inner join stock sk on skk.item_id = sk.item_id and skk.mana
select skk.manger_id, count(*), count(skk.item_id/sk.item_id) as prcntg
from stock skk
inner join stock sk on skk.item_id = sk.item_id and skk.manager_id = sk.manager_id
where skk.stock_sum = 0
group by skk.manager_id
但我认为这不是正确的解决办法。。所以我需要帮助
[产出]预期:
manager_id | total | % of total (prcntg)
----------------------------------------------
237 | 0,5 | 0,25
89 | 0,5 | 0,25
32 | 0,5 | 0
您似乎在使用窗口函数描述此计算:
select manager_id, count(*) as num_items,
sum(case when stock_sum = 0 then 1 else 0 end) as num_out_of_stock,
avg(case when stock_sum = 0 then 1.0 else 0 end) as manager_avg,
sum(case when stock_sum = 0 then 1 else 0 end) / count(*) as overall_avg
from stock s
group by manager_id;
您似乎正在寻找的是总体平均值
select manager_id, sum(av) pcnt
from (
select manager_id, count(case stock_sum when 0 then 1 end) / sum(count(1)) over () as av
from stock group by manager_id)
group by rollup(manager_id)
将计数的零除以所有项目的数量(所有计数的分析和)。如果需要总值,请使用外部汇总。count()
统计非空值并返回整数值。
select manager_id, sum(av) pcnt
from (
select manager_id, count(case stock_sum when 0 then 1 end) / sum(count(1)) over () as av
from stock group by manager_id)
group by rollup(manager_id)