モジュール 13 · レッスン 2 / 4コース内の 50/57~15 min
モジュールのレッスン (2/4)
PARTITION BYによるグループ化
PARTITION BYによるグループ化
すべての行にグローバル計算を行うと便利ですが、それだけでは不十分な場合がよくあります。すべての行の元の詳細を維持しながら、「カテゴリごと」または「顧客ごと」の平均を計算したい場合があります。
ここで、OVER(...) 句内の PARTITION BY が登場します。
PARTITION BYの仕組み
概念的には GROUP BY と同様に動作しますが、結果内の行を折りたたむのではなく、単一行の結果を計算するために関数が操作するデータの「ウィンドウ」の境界のみを定義します。
SQL
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;各製品行には独自の詳細が保持され、cat_avg_price 列には、同じカテゴリ内の製品に限定された平均が表示されます。
運動#sql.m13.l2.e1
試行回数: 0読み込み中…
「products」テーブルから「id」、「category_id」、「price」を抽出します。ウィンドウ関数を使用して、各「category_id」の「price」の合計を計算する「category_total」列を追加します。
エディターを読み込み中…
ヒントを表示
SUM(price) OVER(PARTITION BY category_id) を使用します。
3 回の試行後に解決策が利用可能になります
運動#sql.m13.l2.e2
試行回数: 0読み込み中…
「reviews」テーブルから、「product_id」、「評価」、および「avg_product_rated」(製品ごとに分割された平均評価)を表示します。すべての行を表示します。
エディターを読み込み中…
ヒントを表示
AVG(評価) と PARTITION BY product_id を使用します。必要に応じて NUMERIC にキャストします。
3 回の試行後に解決策が利用可能になります