Menu
CoddyTech

集約関数

CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 68/72。

OVER (ORDER BY ...)を使うと、AVG()やMAX()などの集計関数は、現在の行までの行(ORDER BYの値が現在の行と同じ行も含む)を対象に計算されます。OVER内にORDER BYがない場合は、すべての行を対象に計算されるため、各行の値は同じになります。
たとえば、各期間の終了時点までの最大収益を計算できます。

月収益地域
440East
520East
660West
755West
861East
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1

これは次の値を返します。

月収益max_revenue
44040
52040
66060
75560
86161

4か月目と5か月目の最大収益は40、6か月目と7か月目は60、8か月目は61です。これは、新たにより大きな収益が見つかると、古い値を取り除き、それまでで最大の値を使うためです。

AVG()関数の場合は、次のようになります。

SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1
月売上avg_revenue
44040
52030
66040
75543.75
86147.2

PARTITION BY を使うと、特定のカテゴリごとに計算をグループ化することもできます。たとえば:

SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1

次のようになります:

月売上地域max_revenue
440East40
520East40
660West60
755West60
861East61

これで、最大値が地域ごとに個別に計算されます。東部地域と西部地域では、それぞれ独立して累積最大値が維持されます。

challenge icon

チャレンジ

簡単

利用可能なテーブルと列:

  • books: book, page, words

各本について、本の名前、総ページ数、各ページの単語数を表示し、次の値を計算してください:

  1. その本のいずれかのページにある単語数の最大値
  2. 本全体の1ページあたりの平均単語数
  3. 現在のページの単語数と、本の1ページあたりの平均単語数との差

本とページ番号の順に結果を表示してください。

次の列を返してください:

  • book
  • page
  • words
  • max_words_in_book
  • avg_words_per_page
  • diff_from_avg

自分で試してみよう

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド