2016-04-26 17 views
0

私は数値の列を持ち、各値が合計の何%であるかを求めたいが、絶対値でそれをしたい。実行するクエリは以下のとおりですが、集計関数と非集計フィールドの両方を使用できないというエラーが表示されます。また、私は結合を使用したくないので、これが可能かどうかはわかりません。たぶん私はウィンドウ関数を使用することができますが、私はそれらに精通していません。このクエリの説明やウィンドウ関数の説明は、非常に高く評価されます。絶対値/絶対値和とウィンドウ関数を取得する方法

select ABS(val)/SUM(ABS(val)) from table 
+0

マイナスを避けるための絶対値は? –

答えて

0

おそらくのようなもの:。。彼はGoogleのビッグデータのためのDevの提唱であるよう

SELECT ABS(x) abs_x, RATIO_TO_REPORT(abs_x) OVER() ratio 
FROM (SELECT 3 x),(SELECT 4 x),(SELECT -2 x),(SELECT 1 x),(SELECT 7 x), (SELECT 1 x) 
1

が完全に、(明らかに上記のフェリペさんのコメントに同意するには、GCPのポッドキャスト、フェリペであなたのエピソードを追加しました! )しかし、もう少し説明するために、私は2セントを追加します。

私はBigQueryを初めて使用したときにウィンドウ関数に非常に混乱しましたが、Felipeのコメントで最も重要な小さなナゲットは空のOVER()ステートメントです。これは本質的に "Open Window"機能を提供するため、データの分割、データの順序付け、またはウィンドウ枠節の提供は行いません。これにより、列全体にわたってRATIO_TO_REPORT()を実行することができます。ウィンドウ関数の完全な機能にあまりにも深く潜ることなく、絶対値と、それは列に保持している相対的な割合の両方を取得するために

SELECT ABS(number) AS abs_num, RATIO_TO_REPORT(abs_num) OVER() 
FROM [dataset.project] 

だから基本的に、あなたのクエリが同じくらい簡単になります。

ウィンドウ機能についての詳細は、Query Referenceを参照してください。希望が助けてくれる!

+0

ありがとう!これは本当に物事をクリアした。好奇心の外に、絶対的な列bの絶対値/絶対的な列bの和を使用するようなことをしたいのですが? Ratio_To_reportは1列のみを使用しているように見えます – Feltie

+0

これを行う方法は唯一の方法です。SELECT abs_num/num2_sum FROM( SELECT ABS(数値)AS abs_num、SUM(ABS(数値2) ))OVER()AS num2_sum FROM [datetet.tablename] )これを達成するにはもっとエレガントな方法がありますが、副選択は比較的簡単です。 – andre622

関連する問題