2016-05-05 8 views
0

私はウィンドウ関数の使い方を学び、このSQL文に遭遇しました。SQLウィンドウのスコープ

select 
    ... 
    sum(ss_ext_sales_price) * 100/sum(sum(ss_ext_sales_price)) over (partition by i_class) as revenueratio 

from 
    ... 
where 
    ... 
group by 
    i_item_id, 
    i_item_desc, 
    i_category, 
    i_class, 
    i_current_price 

私の質問はi_classパーティションがこれらSUMすべての機能3に適用されるかどうか、それらのいくつかはgroup byグループを使用して計算されているかどうかです。

答えて

1

ウィンドウ関数と集計関数。 。 。あなたが最初にそれらを一緒に使用し始めるとき、彼らは非常に厄介に見えます。パーティション句は最初sum()とは何の関係もありませんので、ちょうど分母を見てみましょう:

sum(sum(ss_ext_sales_price)) over (partition by i_class) as revenueratio 

overは最初sum()に適用されます。これは合計の列の合計を計算しています。 。 。すなわち、合計金額。

sum(sum(ss_ext_sales_price) over (partition by i_class)) as revenueratio 
:、あなたは集約関数の引数としてウィンドウ関数を持つことが許されていません

sum(ss_ext_sales_price) 
sum(sum(ss_ext_sales_price)) over (partition by i_class) as revenueratio 

事実:私はそれがこれを抜け出すために私を助けたと思います

関連する問題