如何确定Oracle中列值的分布?

时间:2012-01-17 05:03:35

标签: oracle plsql analytics

例如,如果我有一个代表YN标记的列,则Y的百分比是多少,N的百分比是多少?我知道我可以编写一个查询来查找这些数字,然后自己计算百分比,但我认为应该直接在PL / SQL中使用NTILE等分析函数进行此操作。

SELECT COUNT(1), enabled_flag
FROM widgets
GROUP BY enabled_flag;

给我:

COUNT(1)   | enabled_flag
  123124   | Y
  234234   | N

我需要:

enabled_flag | percentage
Y            |         34
N            |         56

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:5)

尝试分析功能:

SELECT round(100*COUNT(1)/sum(count(1)) over (),0), enabled_flag
FROM widgets
GROUP BY enabled_flag;

编辑...您还可以使用RATIO_TO_REPORT功能,这可能使其看起来更清晰或更容易维护:

SELECT round(100*RATIO_TO_REPORT(count(1)) over (),0), enabled_flag
FROM widgets
GROUP BY enabled_flag;

答案 1 :(得分:1)

这可能不是最好的方式,但我想它应该有效。

select count(*) * 100 / (select count(*) from widgets), enabled_flag
from widgets
group by enabled_flag