0

ウィンドウ関数の使用方法を学習していて、この 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パーティションがこれら 3 つの関数すべてに適用されるのか、SUMまたはそれらの一部がグループ化を使用して計算されるのかということgroup byです。

4

1 に答える 1

1

ウィンドウ関数と集計関数。. . 最初に一緒に使い始めると、非常にぎこちなく見えます。分割句は最初の とは関係がないsum()ため、分母だけを見てみましょう。

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

は最初のoverに適用されsum()ます。これは合計列の合計を計算しています。. . つまり総額です。これを打破するのに役立ったと思います:

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

実際、集計関数の引数としてウィンドウ関数を使用することはできません。

 sum( sum(ss_ext_sales_price) over (partition by i_class) ) as revenueratio
于 2016-05-05T16:40:31.620 に答える