SQLパズル 11その2 HAVING句と特性関数を使った解法
解法1
https://qiita.com/RYA234/items/450e6c15aaca5b193718
要件
以下条件を満たす作業依頼IDを求めたい:
1.工程番号0が完了している(step_nbr=0 の step_status='C')
2.工程番号1~Nが未完了(サブクエリ部分)
解法
GROUP BYによってworkorder_id毎の部分集合が作成される。
作成された部分集合はHaving句を使って、条件指定される。
部分集合の件数=
[step_nbr=0 の step_status='C'の件数]+[step_nbr<>0 の step_status='W'の件数]
ベン図
Having句とcase文を理解している人にとっては可読性が高いSQL文だと思います。
(というより。解法1が難しかった><)
参考
SQLパズル 第二版 p46
達人に学ぶSQL徹底指南書第2版 p116 HAVING句の力 特性関数の応用
達人に学ぶSQL徹底指南書第2版 p293 7箇条
IF文やCASE文や、CASE式で置き換える。
SQLパズル サポートページ
https://mickindex.sakura.ne.jp/database/db_support_sqlpuzzle.html#LocalLink-p11