集約関数
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 68/72。
集計関数は、現在の行までのAVG()やMAX()、その他の集計関数を計算するために使用されます。
たとえば、各期間の終了時点までに得られた最大の収益を計算できます。
| month | revenue | region |
| 4 | 40 | East |
| 5 | 20 | East |
| 6 | 60 | West |
| 7 | 55 | West |
| 8 | 61 | East |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1これは次を返します:
| month | revenue | max_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
月 4 と月 5 の最大 revenue は 40、月 6 と月 7 では 60、月 8 では 61 です。これは、新しい、より大きな revenue を見つけると、古いものを破棄し、それまでで最大のものを使用するためです。
AVG()関数の場合は、次のようになります。
SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1| month | revenue | avg_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 30 |
| 6 | 60 | 40 |
| 7 | 55 | 43.75 |
| 8 | 61 | 47.2 |
PARTITION BYを使用すると、特定のカテゴリごとに計算をグループ化することもできます。例:
SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1次のようになります:
| month | revenue | region | max_revenue |
| 4 | 40 | East | 40 |
| 5 | 20 | East | 40 |
| 6 | 60 | West | 60 |
| 7 | 55 | West | 60 |
| 8 | 61 | East | 61 |
これで、各 region ごとに最大値が個別に計算されます。East region と West region は、それぞれ独立して自身の累積最大値を維持します。
チャレンジ
簡単利用可能なテーブルと列:
books:book、page、words
各 book について、book 名、総ページ数、各ページの words 数を表示し、次を計算してください:
- その book のいずれかのページに含まれる words 数の最大値
- book 全体におけるページあたりの words 数の平均値
- 現在のページの words 数と、その book のページあたりの平均 words 数との差
結果は book と page number の順に並べて表示してください。
次の列を返してください:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_from_avg
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド