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

nin*_*ded 4 oracle analytics plsql

例如,如果我有一个代表一个Y或一个N标志的列,那么百分比是Y多少百分比是N多少?我知道我可以编写一个查询来查找这些数字,然后自己计算百分比,但我认为应该直接在PL/SQL中使用分析函数来做这个NTILE.

SELECT COUNT(1), enabled_flag
FROM widgets
GROUP BY enabled_flag;
Run Code Online (Sandbox Code Playgroud)

给我:

COUNT(1)   | enabled_flag
  123124   | Y
  234234   | N
Run Code Online (Sandbox Code Playgroud)

我需要:

enabled_flag | percentage
Y            |         34
N            |         56
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?

Joh*_*yle 5

尝试分析函数:

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

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

SELECT round(100*RATIO_TO_REPORT(count(1)) over (),0), enabled_flag
FROM widgets
GROUP BY enabled_flag;
Run Code Online (Sandbox Code Playgroud)