子供に情報技術者試験の問題を聞かれて答えられなかった。DISTINCTとかEXISTS,HAVINGなんて使ったことないし。
分からないままではいかんので、自分でもSQLを書いてみることにした。
社員テーブルより、職務がプログラマである社員が5人未満の部署の 部署コードを探すSQLはどれか <社員テーブル> |社員番号|社員名|部署コード|職務| SELECT DISTINCT 部署コード FROM 社員 S1 WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = 'プログラマ') SELECT DISTINCT 部署コード FROM 社員 S1 WHERE 5 < (SELECT COUNT(S2.社員番号) FROM 社員S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 <> 'プログラマ') SELECT DISTINCT 部署コード FROM 社員 S1 WHERE EXISTS (SELECT * FROM 社員S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = 'プログラマ') GROUP BY S1.部署コード HAVING COUNT(*) < 5 SELECT DISTINCT 部署コード FROM 社員 S1 WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = 'プログラマ' GROUP BY S1.部署コード HAVING COUNT(*) < 5)
試行錯誤の結果、部課コードごとのプログラマの数をまとめるSQLはできた
SELECT S1.`部署コード` , COUNT(*) FROM 社員テーブル S1 WHERE ( S1.`職務` = 'プログラマ' ) GROUP BY S1.`部署コード`
上記を副問い合わせとして、親のSQLを作ればいいのだろうか。。 もうちょっと勉強しないと分からない。