集約関数…こいつらはデータ分析の世界のマジシャンだよ!何百万行ものデータをギュッとまとめて分かりやすい結果にしてくれる。カウントしたり、最小値・最大値を探したり、平均を出したり、いろんなことができるんだ。じゃあ、順番に見ていこう!
集約関数っていうのは、SQLの特別な関数で、複数行のデータに対して操作して、ひとつの結果を返してくれるやつ。たとえば、朝のコーヒーの統計を全部集める感じ。たとえば:一週間で何杯飲んだか、砂糖を入れたか、何日連続でクリームを入れたか、みたいな。
集約関数で解決できる課題の例:
- テーブル内の全レコード数をカウントする。
- 数値カラムの最小値や最大値を見つける。
- カラムの値を合計する。
- カラムの値の平均を出す。
- ユニークな値を抽出する。
「裏側」でどう動いてるの?
SQLはSELECTでデータを取得した後に集約関数を実行するんだ。たとえばSUM()やAVG()を指定したら、まずデータを集めて、その選ばれた行だけで計算してくれる。
PostgreSQLの主な集約関数
じゃあ実際に使ってみよう!トップ5のヒーローたちを紹介するね:
COUNT()— 行数をカウントする。SUM()— 数値カラムの値を合計する。AVG()— 平均値を計算する。MIN()— 最小値を見つける。MAX()— 最大値を見つける。
集約関数の使い方例
COUNT()で行数をカウント
COUNT()関数は、テーブル内の全行数や、特定カラムのNULLじゃない値の数をカウントできるよ。
例:studentsテーブルがあって、学生の情報が入ってるとする:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto Art | 20 | 85 |
| 2 | Maria Chi | 22 | 90 |
| 3 | Alex Lin | 21 | 78 |
| 4 | Anna Song | 23 | NULL |
学生の総数をカウントしてみよう:
SELECT
COUNT(*) AS total_students
FROM students;
結果:
| total_students |
|---|
| 4 |
今度はgradeが入ってる学生の数をカウントしてみよう:
SELECT
COUNT(grade) AS students_with_grades
FROM students;
結果:
| students_with_grades |
|---|
| 3 |
なんでこうなるの?それはCOUNT(column)はNULLを無視するからだよ。
SUM()で合計を出す
SUM()関数は、数値カラムの全値を合計するのに使うよ。
例:学生たちの合計点数を出してみよう。
SELECT
SUM(grade) AS total_grades
FROM students;
結果:
| total_grades |
|---|
| 253 |
メモ:カラムにNULLがあっても、合計には無視されるよ。
AVG()で平均値を出す
AVG()関数は、カラム内の数値データの平均を計算するよ。
例:学生の平均点を計算してみよう。
SELECT
AVG(grade) AS average_grade
FROM students;
結果:
| average_grade |
|---|
| 84.33 |
気づいたかもだけど、NULLはまた無視されてる。
MIN()とMAX()で最小・最大値を探す
一番小さい値や一番大きい値を探したいときは、MIN()とMAX()を使うよ。
例:一番若い学生と一番年上の学生を探してみよう。
SELECT
MIN(age) AS youngest_student,
MAX(age) AS oldest_student
FROM students;
結果:
| youngest_student | oldest_student |
|---|---|
| 20 | 23 |
これらの関数については、また次のレクチャーで詳しく話すね。
NULLと仲良くなろう
NULLについては今度別でレクチャーするけど、ざっくり言うとNULLは「値がない」ってこと。何もない。空っぽ。ゼロみたいなもん!
たとえば、studentsテーブルがあって、学生の情報が入ってるとする:
| id | name | age | grade | hobbie |
|---|---|---|---|---|
| 1 | Otto Art | 20 | 85 | |
| 2 | Maria Chi | 22 | 90 | ダンス |
| 3 | Alex Lin | 21 | 78 | |
| 4 | Anna Song | 23 |
名前と年齢は必ずあるけど、成績や趣味はない場合もある。もしテーブルのセルに何も入ってなかったら、それはNULLが入ってるって言うんだ。NULLは数字でも文字列でもなくて、「どんな値もない」っていう特別なコードだよ。
GO TO FULL VERSION