0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

集約と並べ替えについて

Posted at

はじめに

初学者のアウトプット記事となります。
備忘も含め、集約関数、並べ替えについて書こうと思います。
そもそも集約関数とか意味わからんし、どうやって使うん状態だったのでお勉強しました。

集約関数ってなに

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: 結果を並び替える。

間違ってたらすみません!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?