Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 高度なレポーティングのためのウィンドウ関数 | データ分析のための高度なSQL
データ分析のためのSQL

book高度なレポーティングのためのウィンドウ関数

メニューを表示するにはスワイプしてください

ウィンドウ関数は、SQLにおける強力な機能であり、現在の行と関連する複数の行にわたって計算を実行しながら、結果セットを集約せずに表示できます。SUM()AVG() のような集約関数がグループごとに単一の値を返すのに対し、ウィンドウ関数は各行を表示したまま、累積合計、ランキング、移動平均などの分析を可能にします。これは、上位顧客のランキング、売上の移動平均の計算、各行と全体平均の比較など、高度な分析に不可欠です。

ウィンドウ関数を使うことで、標準的な集約だけでは困難または非効率的な分析も簡単に実現できます。たとえば、各顧客の合計購入金額だけでなく、購入数量に基づく全顧客中での順位も知りたい場合や、日ごとの累積売上合計を確認して時間経過による傾向を把握したい場合などです。ウィンドウ関数は、こうした分析を効率的かつ直感的に実現します。

12345678910111213
SELECT c.customer_id, c.first_name, c.last_name, SUM(s.quantity) AS total_quantity, ROW_NUMBER() OVER (ORDER BY SUM(s.quantity) DESC) AS quantity_rank FROM customers c JOIN sales s ON c.customer_id = s.customer_id GROUP BY c.customer_id, c.first_name, c.last_name ORDER BY quantity_rank;
copy

このクエリでは、ROW_NUMBER() 関数が各顧客の合計購入数量に基づいて一意の順位を割り当てます。OVER (ORDER BY SUM(s.quantity) DESC) 句はランキングの計算方法を定義しており、合計数量が多い顧客ほど順位が上位(小さい番号)になります。これはリーダーボードの作成やトップパフォーマーの特定に非常に有用です。

ウィンドウ関数では、PARTITION BYORDER BY という2つの主要な句がよく使われます。PARTITION BY は結果セットをグループ(パーティション)に分割し、各グループ内でウィンドウ関数を適用します。たとえば、国ごとに顧客をランキングしたり、商品ごとに累積合計を計算したりできます。ウィンドウ関数内の ORDER BY は、各パーティション内で関数が行を処理する順序を指定し、累積合計やランキングなどの計算に不可欠です。

たとえば、日ごとの売上の累積合計を確認したい場合、SUM() 関数をウィンドウ関数として使用し、日付で並べ替えることで正しく累積されます。商品ごとの累積合計が必要な場合は、PARTITION BY product_id 句を追加します。

12345678910
SELECT sale_date, SUM(total_amount) AS daily_total, SUM(SUM(total_amount)) OVER (ORDER BY sale_date) AS running_total FROM sales GROUP BY sale_date ORDER BY sale_date;
copy

1. 次のうち、SQLのウィンドウ関数はどれですか?

2. ウィンドウ関数における PARTITION BY の役割は何ですか?

3. ウィンドウ関数を使って、製品を総売上額で順位付けするために空欄を埋めてください。

question mark

次のうち、SQLのウィンドウ関数はどれですか?

すべての正しい答えを選択

question mark

ウィンドウ関数における PARTITION BY の役割は何ですか?

正しい答えを選んでください

question-icon

ウィンドウ関数を使って、製品を総売上額で順位付けするために空欄を埋めてください。

SELECT product_id, SUM(total_amount) AS total_sales, OVER (ORDER BY SUM(total_amount) DESC) AS sales_rank FROM sales GROUP BY product_id;
The query will return each product's ID, its total sales, and its rank based on total sales, with the highest-selling product ranked first.

クリックまたはドラッグ`n`ドロップして空欄を埋めてください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  3
some-alt