【はびんぐく】
HAVING句 とは?
💡 グループにまとめた後でふるいにかける!集計結果の門番
📌 このページのポイント
HAVING句って、WHERE句と何が違うの?
WHERE句は「グループ化する前の個々の行」をフィルタするけど、HAVING句は「GROUP BYでまとめた後の集計結果」をフィルタするんだよ。実行タイミングが違うんだ
具体的な例で教えてほしいな!
たとえば「各部署の社員数が5人以上の部署だけ表示したい」場合、SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) >= 5 と書くんだ。COUNTの結果でフィルタするからHAVINGを使うんだよ
WHEREでCOUNTを使っちゃダメなの?
WHEREとHAVINGを両方使うこともあるの?
もちろん!たとえば「東京の部署だけを対象に(WHERE)、社員数が5人以上の部署を取得(HAVING)」みたいに組み合わせるんだ。先にWHEREで行を絞った方がパフォーマンスがいいよ
HAVING句で気をつけることってある?
HAVINGで書ける条件をWHEREに移せるなら移した方がいいよ。GROUP BY前に行数を減らせるからパフォーマンスが上がるんだ。HAVINGは集計関数を使った条件のときだけ使うのがベストプラクティスだね
まとめ:ざっくりこれだけ覚えればOK!
「HAVING句」って出てきたら「GROUP BYした後の集計結果にフィルタをかける句」と思えればだいたいOK!
📖 おまけ:英語の意味
「HAVING Clause」 = HAVING句
💬 英語のhaving(持っている)から来ていて、「こういう条件を持っているグループだけ」という意味合いだよ