0
0

SQL(group by + having句)

Last updated at Posted at 2024-08-12

背景

group by に関わるイメージをもっと具体的にしたいと思い、
例題にトライ

目的

例題を見て下記がわかるようになること

  • group by が必要なところ
  • havingが必要なところ

例題1

下記の部屋番号から、利用日数が10日以上の部屋を選択するSQLを作成する。

利用履歴テーブル

部屋番号 利用開始日 利用終了日
--- --- ---
101 24-09-05 24-09-08
101 24-09-10 24-09-11
101 24-09-13 24-09-19
--- --- ---
201 24-09-05 24-09-08
201 24-09-09 14-09-10

完成予想テーブル

部屋番号 日数
101 10

自分が書いた誤った回答

201 nullで表示されてしまうため間違い。
as も抜けている。

SELECT 部屋番号
CASE WHEN SUM(利用終了日-利用開始日)>=10 then SUM(利用終了日-利用開始日) ELSE NULL END
FROM 利用履歴テーブル
GROUP BY 部屋番号

正解

SELECT 部屋番号,SUM(利用終了日-利用開始日) AS 日数
FROM 利用履歴テーブル
GROUP BY 部屋番号
HAVING SUM(利用終了日-利用開始日)>=10

学び

最近case whenを学んだことで、
いらんところにcase文を使ってしまった。

今回の間違えによって下記を学んだ

  • select内にcase文を書くだけだと、集約キーを全て表示する。
  • havingを使用することで条件に満たない、集約キーのレコードは削除する。

※集約キーとは、group by 〇〇 に指定したキーのこと

次のステップ

case文はもう少し練習が必要そう。。。

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