Sql 达到最佳性能的总用户百分比

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

我想获得仓库中物品/用户的百分比(仅限缺货的物品)

所以我必须得到:

经理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.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)