IT企業未経験30代 100日後に自社のシステムを作れるようにする。⑧
今回は、前回で作成したテーブルからGROUP BY句 HAVING句を使用した例を作成したいと思います。
GROUP BY句について
GROUP BY句を使用することによって、テーブル全体の中からいくつかのグループに分けて集約することが出来る。 集約関数(SUMやCOUNTなど)と併用することでグループごとの合計値やレコード数を求めることが出来ます。
一度例を作成しますので、また検索したい対象を増やしておきます。
INSERT INTO employee_attendances(name,check_in_datetime,check_in_message) VALUES
('Tanaka Tarou', '2024-9-6 07:00:00', 'NULL');
INSERT INTO employee_attendances(name,check_in_datetime,check_in_message) VALUES
('Yamada Hanako', '2024-9-6 07:10:00', 'NULL');
INSERT INTO employee_attendances(name,check_in_datetime,check_in_message) VALUES
('Suzuki kenta', '2024-9-6 07:20', 'NULL');
INSERT INTO employee_attendances(name,check_in_datetime,check_in_message) VALUES
('Tanaka Tarou', '2024-9-7 07:30:00', 'NULL');
今回従業員の名前は必ず入力しているので、例えば出勤日数を求めたい場合、名前をCOUNT関数で計算しGROUP BYでグループ分けしてみます。
SELECT name, COUNT(*)
FROM employee_attendances
GROUP BY name;
HAVING句について
HAVING句ですがGROUP BY句でグループ分けしたことに対してさらに条件を指定することが出来ます。
例えば、先ほどGROUP BYでnameを合計数値を出したのですが、その中からさらに同じ合計になっている条件で求めたい場合
SELECT name, COUNT(*)
FROM employee_attendances
GROUP BY name
HAVING COUNT(*) = 3;
注意点まとめ・余談
GROUP BY句
- GROUP BY句に指定することを集約キーやグループ化列と呼ぶ
- 句の記述順序がある SELECT→FROM→WHERE→GROUP BY
- GROUP BY/WHERE句を併用する場合SELECT文の実行順序が変わる FROM→WHERE→GROUP BY→SELECT
- 集約キーにNULLが含まれる場合、結果にも「不明」行(空行)として出てくる。
HAVING句
- 句の記述順序がある SELECT→FROM→GROUP BY→HAVING
- 役割の違いを理解しておく WHERE句=行に対する条件指定 HAVING句=グループに対する条件指定
今回は、INSERTした内容ですが何回か間違えたため、削除しているうちにIDにAUTO_INCREMENTつけているのでIDが歯抜け番号になってしまいました。性格上歯抜けになっていると気持ち悪くなるので、IDに番号指定して解決することが出来ました。
次回は、TRANSACTIONついてについてまとめていきます。
また次回よろしくお願いします。
~2024年9月7日~