1. DISTINCT
DISTINCT
DISTINCTを用いると、検索結果から重複するデータを除くことが可能です。「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができます。
SELECT DISTINCT(character_name)
FROM purchases;
2. 四則演算
— 「SELECT name, price, 」に追加し、消費税を含んだpriceカラムのデータを取得してください
SELECT name, price, price * 1.08
FROM purchases;
3. SUM
WHEREとSUM関数
SUM関数はWHEREと併用することができます。
下の図では、WHEREを使うことで、にんじゃわんこが今まで使ったお金の合計金額を取得しています。
— character_nameが「にんじゃわんこ」であるpriceカラムのデータの合計を取得してください
SELECT SUM(price)
FROM purchases
WHERE character_name = “にんじゃわんこ”;
4. AVG
AVG関数
SQLで数値の平均を計算する場合は、AVGを用います。
「AVG(カラム名)」のようにすることで、指定したカラムに保存されたデータの平均を計算することが可能です。
— character_nameが「にんじゃわんこ」であるpriceカラムのデータの平均を取得してください
SELECT AVG(price)
FROM purchases
WHERE character_name = “にんじゃわんこ”;
5. COUNT
COUNT関数とnull
COUNT関数でカラム名を指定した場合、nullになっているデータの数は計算されません。
右の図ではnullのデータが計算されていないため、4件と数えられます。
COUNT関数の使い方
nullの数も含めてデータの数を計算したい場合は、COUNT関数で * (全てのカラム)を指定します。* を使った場合、特定のカラムのデータの数ではなく、レコードの数を計算します。この方法で、nullの数を含めてデータの数を数えられます。
SELECT COUNT(*)
FROM purchases
WHERE character_name = “にんじゃわんこ”
;
6. MAX・MIN
SELECT MAX(price)
FROM purchases
WHERE character_name = “にんじゃわんこ”;
7. GROUP BY
GROUP BY
GROUP BYを用いると、データをグループ化することができます。例えば図のように「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなります。
GROUP BYの注意点
GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみです。
図ではSELECTで集計関数を使っていないため、日付ごとに集計された値が取得できません。
SELECT COUNT(price), purchased_at
FROM purchases
GROUP BY purchased_at;
8. GROUP BY (複数)
— purchased_atとcharacter_nameごとにお金を使った回数を取得してください
SELECT COUNT(*), purchased_at, character_name
FROM purchases
GROUP BY purchased_at, character_name;
9. GROUP BY (WHERE)
WHEREとGROUP BY
GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書きます。
WHEREとGROUP BYと集計関数は以下の順番で実行されていきます。右下の図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行されます。
— WHEREに条件を付け足してcategoryが食費であるデータを
— purchased_atとcharacter_nameでグループ化してください
SELECT SUM(price), purchased_at, character_name
FROM purchases
WHERE category = “食費”
GROUP BY purchased_at, character_name;
10. HAVING
HAVING
GROUP BYでグループ化したデータを更に絞り込みたい場合には、HAVINGを用います。図のように「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得することができます。
WHEREとHAVING
グループ化した後のデータを絞り込む際、WHEREではなくHAVINGを使うのは、SQLの各コマンドが以下の順番で実行されていくためです。図のようにWHEREはまず最初に、そのあとにGROUP BYと関数が実行され、その後にHAVINGが実行されます。
WHEREとHAVINGの違い
実行順序によって、WHEREとHAVINGは検索対象に違いがあります。WHEREはグループ化される前のテーブル全体を検索対象とするのに対し、HAVINGはGROUP BYによってグループ化されたデータを検索対象とします。
HAVINGの注意点
HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使います。
— 日付とキャラクターごとの合計金額のうち、3000円を超えるデータのみを取得してください
SELECT SUM(price), purchased_at, character_name
FROM purchases
GROUP BY purchased_at, character_name
HAVING SUM(price) > 3000;
11. 総合演習
— キャラクターごとにグループ化し、priceカラムの合計と、character_nameを取得してください
— ただし、WHEREでcategoryが「雑費」であるレコードから集計してください
SELECT SUM(price), character_name
FROM purchases
WHERE category = “雑費”
GROUP BY character_name
;