2012-01-17 11 views
4

たとえば、YまたはNフラグを表す列がある場合、何パーセントがYで、何パーセントがNですか?私は、これらの数値のそれぞれを見つけて自分でパーセンテージを計算するためのクエリを書くことができますが、NTILEのような解析関数を使ってPL/SQLでこれを行うのが簡単だと思います。Oracleで列の値の分布を調べるにはどうすればよいですか?

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 

誰もが正しい方向に私を指すことができますか?

答えて

5

などの分析機能を試してみてください:

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

EDIT ...あなたにも維持することがクリーナーまたはより簡単に見えるようにするかもしれませんRATIO_TO_REPORT関数を使用することができます。

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

+ 1勝利のためのRATIO_TO_REPORT! – ninesided

1

これは最善の方法ではないかもしれませんが、うまくいくはずです。

select count(*) * 100/(select count(*) from widgets), enabled_flag 
from widgets 
group by enabled_flag 
関連する問題