H2のCASE文で集約関数使ったときのおかしな挙動
CASE 集約関数 WHEN ... と言う書き方をするとちゃんと動いてくれないという話。
『ジョー・セルコ / SQLパズル第2版(ISBN:9784798114132)』見ながらH2で確認してたら、CASE文の挙動がおかしいような。
select course_nbr, min(teacher_name) as col2, case count(*) when 1 then null when 2 then max(teacher_name) else '--More--' end as col3 from register group by course_nbr, student_name
結果
COURSE_NBR | COL2 | COL3 |
10 | Alpha | null |
30 | Delta | --More-- |
20 | Bravo | --More-- |
本当はCOURSE_NBR = 20の行は、Bravo, Charlieで出るようにデータ入れてたんですが…。
で、条件を入れ替えてみました。
select course_nbr, min(teacher_name) as col2, case count(*) when 2 then max(teacher_name) when 1 then null else '--More--' end as col3 from register group by course_nbr, student_name
結果
COURSE_NBR | COL2 | COL3 |
10 | Alpha | Alpha |
30 | Delta | --More-- |
20 | Bravo | --More-- |
あれー?
ひょとして、count(*)の結果が保存されない?
H2のソース見るのは面倒だから確認してないけど。