2013-06-05 34 views
6

データセットでGROUP BYとCOUNT(*)を実行していますが、合計に対する各グループの割合を計算したいと思います。GROUP BYを使用してグループの割合を計算する

はたとえば、このクエリでは、私が知りたいのですがどのくらいの数()各状態は、総(publicdataから選択数():samples.natality):上で表しため

SELECT state, count(*) 
FROM [publicdata:samples.natality] 
GROUP by state 

SQLでそれを行うにはいくつかの方法がありますが、私はBigqueryでそれを行う方法を見つけていません。

ありがとうございます!

+1

チェックRATIO_TO_REPORT、最近発表されたウィンドウ関数(解答例) –

答えて

12

チェックRATIO_TO_REPORT、最近発表されたウィンドウ関数の1:

SELECT state, ratio * 100 AS percent FROM (
SELECT state, count(*) AS total, RATIO_TO_REPORT(total) OVER() AS ratio 
FROM [publicdata:samples.natality] 
GROUP by state 
) 

state percent 
AL  1.4201828131159113 
AK  0.23521048665998198 
AZ  1.3332896746620975 
AR  0.7709591206172346 
CA  10.008298605982642 
+0

昨日の新機能で投稿を見ただけで、これはまさに私が欲しかったことです、ありがとう! – inaki

+0

RATIO_TO_REPORTにROUNDを使用する方法はありますか?パーセント計算には* 100を使用しますか? 1行目、37列目に "オーバー" "オーバー"というエラーが発生しました。期待していた: ")" – tinkerr

3

ダミー値をキーとして、合計に対して自己結合を実行できます。たとえば:

SELECT 
    t1.state AS state, 
    t1.cnt AS cnt, 
    100 * t1.cnt/t2.total as percent 
FROM (
    SELECT 
    state, 
    COUNT(*) AS cnt, 
    1 AS key 
    FROM 
    [publicdata:samples.natality] 
    WHERE state is not null 
    GROUP BY 
    state) AS t1 
JOIN (
    SELECT 
    COUNT(*) AS total, 
    1 AS key 
    FROM 
    [publicdata:samples.natality]) AS t2 
ON t1.key = t2.key 
ORDER BY percent DESC 
+0

感謝ヨルダンの一つ、それはまさに私が望んでいたもの! – inaki

関連する問題