メインコンテンツにスキップ
モジュール 13 · レッスン 1 / 4コース内の 49/57~15 min
モジュールのレッスン (1/4)

導入とOVER句

序論とOVER句

前のレッスンでは、GROUP BY を使用してデータを集計する方法を説明しました。ただし、GROUP BY には大きな制限があります。行が折りたたまれます。都市ごとにグループ化すると、都市ごとに 1 行が取得され、個々の顧客の詳細が失われます。

ここで ウィンドウ関数 が活躍します。元の行を保持しながら、集計計算 (合計や平均など) を実行できます。

OVER() 句

魔法のキーワードは OVER() です。これは、集計関数 (SUM、AVG、COUNT など) をウィンドウ関数として扱い、結果セット全体 (グローバル「ウィンドウ」) に対して計算されるが、単一行ごとに適用されて返されるようにデータベースに指示します。

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

この例では、個々の注文をすべて保持していますが、すべての行には、すべての注文の平均を示す global_average 列もあります。たとえば、注文が平均からどれだけ逸脱しているかを測定する場合に非常に便利です。

運動#sql.m13.l1.e1
試行回数: 0読み込み中…

「製品」テーブルから「価格」列を選択します。テーブル全体に対してウィンドウ関数を使用して計算された最大価格を含む「global_max_price」という列を追加します。

エディターを読み込み中…
ヒントを表示

MAX(price) と OVER() を組み合わせて使用​​します。

3 回の試行後に解決策が利用可能になります

運動#sql.m13.l1.e2
試行回数: 0読み込み中…

「id」、「price」を抽出し、「products」テーブルから全体の平均価格 (「global_avg」) を追加します。

エディターを読み込み中…
ヒントを表示

AVG(価格) OVER() を追加するだけです。

3 回の試行後に解決策が利用可能になります