はじめに
初学者のアウトプット記事となります。
備忘も含め、集約関数、並べ替えについて書こうと思います。
そもそも集約関数とか意味わからんし、どうやって使うん状態だったのでお勉強しました。
集約関数ってなに
SQLでデータに対して、何らかの計算、操作を行う場合に「関数」を使います。
いろいろありますが、基本以下の5つを覚えておけば良さげです。
- COUNT: テーブルのレコード(行数)を数える
- SUM: テーブルの数値列の合計する
- AVG: テーブルの数値列の平均する
- MAX: テーブルの任意の列のデータの最大値を求める
- MIN: テーブルの任意の列のデータの最小値を求める
このような集計用の関数を、「集計関数」 や 「集合関数」 といいます。
つまり「集約」ってのは複数の行を1行にまとめるって覚えればいいですね、はい簡単
使い方
意味は分かったけど使い方わからんってなりました。調べました。
下記表の内容は、自分の机の上にあったものなのであまり気にしないでください。
仮に商品テーブルとしましょう。
商品テーブル
商品ID | 商品名 | 値段 | カテゴリ |
---|---|---|---|
1 | iPhone | 130000 | 電子機器 |
2 | コップ | 200 | キッチン用品 |
3 | グミ | 150 | 食品 |
4 | ティッシュ | 100 | 日用品 |
5 | プルーム・テック | 980 | 電子機器 |
COUNT関数
SELECT COUNT(*)
FROM 商品テーブル;
5
COUNT( )の中のアスタリスクは、「すべての列」を意味します。この( )の中がCOUNT関数の入力にあたります。
列(カラム)が何個あるか数えてくれます。
SUM関数
次は合計を求めるSUM関数を使いましょう。
SELECT SUM(値段)
FROM 商品テーブル;
131430
実行結果の131430という数字は値段カラムの合計を表示しています。
ちなみにNULLのレコードがある場合は0として扱われ、NULLは除外されます。
AVG関数
次は平均を求めます。AVGはAVERAGEの略ですね。中学の時あべらげって読んでました。
SELECT AVG(値段)
FROM 商品テーブル;
26286.0000
そのまま値段の合計を商品の数(レコード数)で割って求めます。
SUMと同じくNULLは除外されます。
MAX MIN関数
複数行から最大値、最小値を求めるにはMAX,MINという関数を使います。
はい、SUMの時から使い方は変わりません。
SELECT MAX(値段), MIN(値段)
FROM 商品テーブル;
MAX 30000
MIN 100
このように値段の最大値と最小値を出してくれます。
ちなみにSUM/AVGは数値型にしか適用できませんが、MAX/MINはどんなデータ型にも使えます。
日付など順序がつけられるデータであれば、最大値最小値が決まるのでこの2つの関数を適用することができます。
GROUP BY句
先ほど使ってきた関数はテーブル全体を集約範囲としていましたが、今度はテーブルをいくつかのグループに分けようと思います。
正直このGROUP BYなどのせいでSQLが難しく感じると思います。
実際に見た方がなにやってるかわかりやすいと思うので、下記のコードを見てみましょう。
SELECT カテゴリ, COUNT(*)
FROM 商品テーブル
GROUP BY カテゴリ;
電子機器 2
キッチン用品 1
食品 1
日用品 1
カテゴリごとに行(レコード)の数を数えました。
このようにGROUP BYはテーブルをグループごとに分けてくれます。
注意しなければならないのは、必ずGROUP BYはFROMより後ろに書かなければいけません。
(WHEREがあるなら、WHEREの後ろ)
HAVING句
GROUP BYでテーブルをグループ分けすることができました。
HAVINGはそのグループに対して条件を指定して選択することができます。
条件指定と聞くとWHEREが思い浮かぶかもしれませんが、WHEREは行(レコード)に対してのみしか条件を指定できないためグループに対する条件指定は使えません。
例としてカテゴリごとの合計金額が1000円以上のものだけを表示するには、次のように書きます。
SELECT カテゴリ, SUM(値段)
FROM 商品テーブル
GROUP BY カテゴリ
HAVING SUM(値段) >= 1000;
電子機器 130980
ORDER BY句
今までは、テーブルを集約したりいろんな条件をつけて加工していましたが、ORDER BYはそれらを並び替えます。
昇順(ASC) や 降順(DESC) を指定して並び替えてみましょう。
SELECT カテゴリ, SUM(値段)
FROM 商品テーブル
GROUP BY カテゴリ
ORDER BY SUM(値段) DESC;
電子機器 130980
キッチン用品 200
食品 150
日用品 100
カテゴリごとの合計金額の降順(大きい順)から並べ替えることができました。
まとめ
集約関数: データを集計する(例:COUNT、SUM、AVG)。
GROUP BY: データを指定した列ごとにグループ化する。
HAVING: グループ化した結果に対して条件を指定する。
ORDER BY: 結果を並び替える。
間違ってたらすみません!