はじめに:データを要約する強力なツール
SQLの基本操作に慣れてきた皆さん、こんにちは! これまでのステップでは、テーブルから特定のデータを取り出したり、並び替えたりする方法を学びましたね。
今回は、データの集まりを要約するための強力なツール、集計関数について学びます。集計関数を使うと、テーブル全体の行数、特定列の合計値や平均値、最大値、最小値などを簡単に計算できます。これらはデータ分析の第一歩として非常に重要です。
このステップで学ぶ主な集計関数は次の5つです。
COUNT
: 行数を数えるSUM
: 合計値を計算するAVG
: 平均値を計算するMIN
: 最小値を見つけるMAX
: 最大値を見つける
さっそく、それぞれの使い方を見ていきましょう!
COUNT: 行数を数える
COUNT
関数は、条件に一致する行の数を数えるために使います。最もよく使われる集計関数の一つです。
COUNT
には主に2つの使い方があります。
COUNT(*):テーブル全体の行数を数える
COUNT(*)
は、テーブルに含まれる全ての行数を返します。NULL
値を含む行もカウントされます。
例: `products`テーブルの全商品数を数える
このクエリは、`products`テーブルに存在するレコードの総数を返します。
COUNT(列名):特定の列でNULLでない行数を数える
COUNT(列名)
は、指定した列の値がNULL
でない行の数を返します。特定の列にデータが入力されているかを確認したい場合に便利です。
例: `products`テーブルで価格(price
)が設定されている商品数を数える
もしprice
列にNULL
値が含まれていれば、その行はカウントされません。
ポイント: COUNT(*)
とCOUNT(列名)
の結果は、指定した列にNULL
値が含まれている場合に異なることがあります。
SUM: 合計を求める
SUM
関数は、指定した列の数値の合計値を計算します。数値型の列に対してのみ使用できます。
例: `products`テーブルの全商品の在庫数(stock_quantity
)の合計を計算する
このクエリは、`stock_quantity`列にある全ての数値を足し合わせた結果を返します。NULL
値はこの計算から除外されます。
AVG: 平均を計算する
AVG
関数は、指定した列の数値の平均値を計算します。これも数値型の列に対して使用します。
例: `products`テーブルの商品の平均価格(price
)を計算する
このクエリは、price
列の合計値を、NULL
でない値を持つ行数で割った結果を返します。SUM(列名) / COUNT(列名)
と同じ計算になります。NULL
値は計算に含まれません。
MIN: 最小値を見つける
MIN
関数は、指定した列の中で最も小さい値を見つけます。数値だけでなく、文字列や日付/時刻型の列にも使用できます(文字列の場合は辞書順、日付/時刻の場合は最も古いもの)。
例: `products`テーブルで最も安い商品の価格(price
)を見つける
このクエリは、price
列の中で最も小さい数値を返します。NULL
値は無視されます。
MAX: 最大値を見つける
MAX
関数は、MIN
関数の逆で、指定した列の中で最も大きい値を見つけます。これも数値、文字列、日付/時刻型の列に使用できます。
例: `products`テーブルで最も高い商品の価格(price
)を見つける
このクエリは、price
列の中で最も大きい数値を返します。NULL
値は無視されます。
集計関数の注意点:NULLの扱い
集計関数を使う上で重要な注意点があります。それはNULL
値の扱いです。
COUNT(*)
を除くほとんどの集計関数 (COUNT(列名)
,SUM
,AVG
,MIN
,MAX
) は、計算の対象となる列の値がNULL
である行を無視します。- 例えば、
AVG(price)
を計算する場合、price
がNULL
の商品は計算に含まれません。合計値を求める際も、NULL
の行数で割る際も、NULL
値を持つ行は考慮されません。 - もし、
NULL
を 0 として扱いたい場合は、COALESCE
関数などを使ってNULL
を特定の値に変換する必要がありますが、これは少し高度なテクニックになります。(今後のステップで触れる可能性があります)
このNULL
の扱いは、特にAVG
関数やCOUNT(列名)
を使う際に意図した結果と異なる場合があるので、しっかり覚えておきましょう。
まとめ
今回は、SQLでデータを要約するための基本的な集計関数 COUNT
, SUM
, AVG
, MIN
, MAX
の使い方を学びました。
関数 | 説明 | 対象列の型 | NULLの扱い |
---|---|---|---|
COUNT(*) |
テーブル全体の行数を数える | – | NULLを含む全ての行を数える |
COUNT(列名) |
指定列でNULLでない行数を数える | 任意 | NULLを無視する |
SUM(列名) |
指定列の合計値を計算する | 数値 | NULLを無視する |
AVG(列名) |
指定列の平均値を計算する | 数値 | NULLを無視する |
MIN(列名) |
指定列の最小値を見つける | 数値, 文字列, 日付/時刻など | NULLを無視する |
MAX(列名) |
指定列の最大値を見つける | 数値, 文字列, 日付/時刻など | NULLを無視する |
これらの関数を使うことで、大量のデータから瞬時に有用な情報を引き出すことができます。しっかり使い方をマスターしましょう!
次のステップでは、これらの集計関数をさらに応用し、特定のグループごとに集計を行うための GROUP BY
句と、集計結果に対して条件を指定する HAVING
句について学びます。お楽しみに!