テーブルの列の合計値や平均値ってどうやって出すの?
集約関数ってなに?
わかりやすく教えて欲しい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
集約関数
SQLでデータに対して何か操作や計算をおこなうには関数を使います。
例えば、テーブル全体の行数を数えたい場合はCOUNT関数を使います。
よく使う関数は次の5つです。とりあえずこの5つは覚えておきましょう。
- COUNT
テーブルのレコード数(行数)を数える - SUM
テーブルの数値列のデータを合計する - AVG
テーブルの数値列のデータを平均する - MAX
テーブルの任意の列のデータの最大値を求める - MIN
テーブルの任意の列のデータの最小値を求める
このような集計用の関数を「集約関数」と呼びます。
集約とは複数行を1行にまとめるという意味です。
このようなテーブルを例に解説していきます。
shohin_id | shohin_mei | shohin_bunrui | kakaku |
‘0001’ | ‘鉛筆’ | ‘事務用品’ | 100 |
‘0002’ | ‘ボールペン’ | ‘事務用品’ | 100 |
‘0003’ | ‘Tシャツ’ | ‘衣類’ | 1000 |
‘0004’ | ‘鍋’ | ‘キッチン用品’ | 2000 |
‘0005 | ‘包丁’ | ‘キッチン用品’ | 1500 |
‘0006’ | ‘帽子’ | ‘衣類’ | NULL |
テーブルの行数を数える(COUNT関数)
行数を数えるにはCOUNT関数を使います。
SELECT COUNT(*) FROM shohin;
実行結果
count
-------
6
引数の「*」はテーブル全行を数えたいときに使います。
逆に、NULLを数えたくない場合は列名を指定して、カウントします。
SELECT COUNT(kakaku) FROM shohin;
実行結果
count
-------
5
帽子のkakakuがNULLなのでカウントされず5行という結果が帰ってきました。
合計を求める(SUM関数)
合計を求めるにはSUM関数を使います。
SUM関数は引数に「*」を取ることはできません。
ある列を指定して合計を計算させます。
SELECT SUM(kakaku) FROM shohin;
実行結果
sum
------
4700
SUM関数はNULLが存在する列を指定した場合、NULL行を除外して計算します。
この例の場合は、100 + 100 + 1000 + 2000 + 1500 = 4700という計算を行なっています。
平均値を求める(AVG関数)
平均値を求めるにはAVG関数を使います。
SELECT AVG(kakaku) FROM shohin;
実行結果
avg
----------------------
940.0000000000000000
実行された計算は次の通りです。
(100+100+1000+2000+1500) / 5 = 940
AVG関数もNULLの行は除外して計算します。
最大値・最小値を求める(MAX関数・MIN関数)
最大値を出すにはMAX関数、最小値を出すにはMIN関数を使います。
SELECT MAX(kakaku), MIN(kakaku) FROM kakaku;
実行結果
max | min
------+-----
2000 | 100
テーブルを集約して検索する方法まとめ
解説の内容をまとめます。
- SQLでデータに対して何か操作や計算をおこなうには関数を使う
- 最低限覚えておきたい関数は次の5つ
COUNT関数、SUM関数、AVG関数、MAX関数、MIN関数
以上、お疲れ様でした。
コメント