子供に情報技術者試験の問題を聞かれて答えられなかった。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を作ればいいのだろうか。。 もうちょっと勉強しないと分からない。