検索結果を加工する
重複したデータを省く DISTINCT
DISTINCTを用いると、検索結果から重複するデータを除くことができる
【書き方】
SELECT DISTINCT (name)
FROM purchases;
- 「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除ける。
- カラム名はカッコ( )で囲む必要があるので注意
- 上記の場合、購入品テーブルで、nameカラムの重複したデータを省いて取得する
取得したデータに割り算・掛け算する(四則演算)
四則演算「足す(+)、引く(-)、かける(*)、割る(/)」が可能。
【書き方例】
SELECT name, price * 1.08
FROM purchases;
- 上記で表示されるのはnameカラムと、税込み値段のpriceカラム
集計関数を使う
合計を求める SUM関数
【書き方例】
SELECT SUM(price)
FROM purchases;
- 上記では、購入品テーブルのpriceカラムの合計を算出できる
WHEREとSUM関数
SUM関数はWHEREと併用できる
【書き方例】
SELECT SUM(price)
FROM purchases
WHERE character_name = “アシタカ”;
- 上記では、アシタカの購入品の合計金額を算出できる
平均を計算する AVG関数
数値の平均を計算する場合は、AVG使う
【書き方】
SELECT AVG(price)
FROM purchases;
- こちらもWHEREと併用できる
保存されているデータ数を集計する COUNT関数
COUNT関数は、指定したカラムのデータの合計数を計算してくれる関数。
【書き方①】
SELECT COUNT(price)
FROM purchases;
- 「COUNT( カラム名 )」とすることで、指定したカラムのデータの数を計算する。
- nullになっているデータの数は計算されない。
【書き方②】
SELECT COUNT(*)
FROM purchases;
- nullの数も含めてデータの数を計算したい場合は、COUNT関数で * (全てのカラム)を指定する
【書き方③】
SELECT COUNT(*)
FROM purchases;
WHERE charatcer_name = “アシタカ”;
- WHEREと併用すると、上記のように、アシタカがいくつ買ったかを集計できる
最大と最小を求める MAX・MIN関数
MAX・MINという関数を用いると、指定したカラムのデータの中からそれぞれ最大・最小のデータを取得することができる。
【書き方①】
SELECT MAX(price)
FROM purchases;
- MAX,MINも他の集計関数と同様にSELECTで取得したカラムに使用できる
- 上記の場合は、priceカラムを指定することでもっとも値段が高かった商品のデータを取得できる。
【書き方②】
SELECT MAX(price)
FROM purchases
WHERE character_name = “アシタカ”;
- WHEREと併用できる
- 上記では、「アシタカの購入品の中で最も高額な値段」を算出できる
データをグループ化する GROUP BY
GROUP BYを用いると、データをグループ化することができる。
【書き方例】
SELECT
(price)
FROM purchases
GROUP BY purchased_at;
- 「GROUP BY カラム名」とすることで、指定したカラム(縦)で、完全に同一のデータを持つレコード(横列)どうしが同じグループとなる。
- 今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加する。
- 上記の場合、「購入日ごとに購入金額の合計」ができる
- GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみ
複数のカラムを使ってグループ化する
【書き方】
SELECT SUM(price), purchased_at, character_name
FROM purchases
GROUP BY purchased_at, character_name;
- GROUP BYは複数のカラム名を適用させることができ、その場合は、カラム名同士をコンマ(,)で繋げる
細かい条件でグループ化する WHEREとGROUP BY
【書き方】
SELECT 集計関数
FROM テーブル名
WHERE 条件
GROUP BY カラム名,カラム名,・・・;
- GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書く。
↓WHEREとGROUP BYと集計関数は以下の順番で実行される
1 | 検索 | WHERE |
2 | グループ化 | GROUP BY |
3 | 関数 | SUM、AVG、COUNT、MAX、MIN |
【例:日付とキャラクターごとの食費に使ったお金の合計を取得する】
SERECT SUM(price), purchased_at, character
FROM purchases
WHERE category = “食費”
GROUP BY purchased_at, character;
- WHEREでカテゴリーが「食費」であるレコードを検索する
- 日付とキャラクターでグループ化する
- 集計関数で集計する
グループ化したデータをさらに絞り込む HAVING
【書き方】
GROUP BY カラム名
HAVING 条件;
- 「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得できる
- HAVINGはGROUP BYによってグループ化されたデータを検索対象とする
↓HAVINGとGROUP BYと集計関数は以下の順番で実行される
1 | 検索 | WHERE |
2 | グループ化 | GROUP BY |
3 | 関数 | SUM、AVG、COUNT、MAX、MIN |
4 | HAVING | HAVING |
【書き方例】
SERECT SUM(price), purchased_at
FROM purchases
GROUP BY purchased_at
HAVING SUM(price) > 1000 ;
- 上記の場合、「日ごとの購入金額の合計が1000円より大きいもの」となる
- 注意:HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う。
コメント