はじめに
HAVING句を使って集合を切り分けることで、NULLを含まない集合の探し方を紹介します。
実行結果はこちらで確認できます。
本記事は、下記の記事の続きです。
本記事では、CASE式による表現を扱っています。
Schemaや、クエリのお題は前の記事を参考にしてください。
Query
SELECT class
FROM members
GROUP BY class
HAVING COUNT(*) = SUM(
CASE
WHEN submit_date IS NOT NULL
THEN 1 ELSE 0 END
)
Results
class |
---|
A |
D |
CASE式は、提出日がNULLでない行については1、NULLなら0というフラグを立てています。
CASE式は、各要素が特定の条件を満たす集合に含まれているかどうかを決める関数を表しています。
こういう関数を
- 特性関数
- 定義関数(集合を定義するという意味)
というそうです。
HAVING句は集合の性質を調べる道具として使えます。とくに集約関数(SUM
, COUNT
)やCASE式と組み合わせると便利です。
手続き型言語では、フローチャートが思考の補助線になりますが、集合指向言語では、HAVING句で集合を切り分けて問題を解く際には紙にベン図的なものを書くと効果的だと思います。
本日は以上です。
次は、特性関数やを利用して、複雑な条件を集合を切り分けて集計をしてみましょう!
参照
116p
アウトプット100本ノック実施中