2016-05-18 26 views
3

イベント列に何が表示されるかを数える次のコードがあります。SQL - カウント(列)のパーセントを計算する

SELECT event, count(event) as event_count 
FROM event_information 
group by event 

event event_count 
a  34 
b  256 
c  45 
d  117 
e  3 

このように各行の割合を計算したいと考えています。

event event_count event_percent 
a  34   7.47 
b  256   56.26 
c  45   9.89 
d  117   25.71 
e  3   0.66 
+0

どのデータベースを使用していますか? – sgeddes

+1

合計イベントを取得し、変数に保存します。元のselectステートメントでその変数を使用してください –

答えて

6
SELECT event, 
     count(event) as event_count, 
     count(event) * 100.0/(select count(*) from event_information) as event_percent 
FROM event_information 
group by event 
+0

これは、where句に日付範囲を入れるまでうまくいきます。計算される割合は、日付範囲ではなくデータ全体から計算されます。想像しているように、event_countが低いほど、パーセンテージはすべて小さくなります。 –

+0

内部選択に同じ 'where'節を追加するだけです。 –

1

ほとんどのSQL方言はANSI標準のウィンドウ機能をサポート。だから、あなたのようにクエリを記述することができます。

select event, count(*) as event_count, 
     count(*) * 100.0/ sum(count(*)) over() as event_percent 
from event_information 
group by event; 

ウィンドウ関数は一般的にサブクエリや他の方法よりも効率的です。

関連する問題