過去問解きまくり研究所 ホーム

平成29年度 春期 午前Ⅱ 問8

データ操作

CASEに関する問題

“社員”表から,部署コードごとの主任の人数と一般社員の人数を求めるSQL文とするために,aに入る字句はどれか。ここで,実線の下線は主キーを表す。

社員(社員コード,部署コード,社員名,役職)

〔SQL文〕

SELECT 部署コード,
   COUNT(CASE WHEN 役職 = '主任' [  a  ] END) AS 主任の人数,
   COUNT(CASE WHEN 役職 = '一般社員' [  a  ] END) AS 一般社員の人数
FROM 社員 GROUP BY 部署コード

〔結果の例〕

部署コード主任の人数一般社員の人数
AA0125
AA0213
BB0101
答えと解説を見る

✓ これが正解ウTHEN 1 ELSE NULL

解説

COUNTはNULLを数えないので、該当しない行はNULLにします。

見分ける軸は、COUNT(式)がどの値を数えるかです。COUNTに列や式を渡すと、値がNULLでない行だけを数えます。そこで、CASE式で役職が主任の行には1、それ以外の行にはNULLを返すようにすれば、COUNTは主任の行だけを数えます。一般社員の人数も同じ仕組みです。返す値が1か0かは関係がなく、NULLでないかどうかだけが効きます。部署コードでGROUP BYしているので、部署ごとに主任の人数と一般社員の人数が並び、結果の例のように主任が0人の部署も0と出ます。COUNTは値の大小ではなくNULLでないかを見る、と覚えておくと、ELSEに入れる値で迷いません。

ほかの選択肢はなぜ違うのか

出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問8

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)