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日~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です