平成24年度 春期 午前 問26
データベース
SQLに関する問題
販売価格が決められていない“商品”表に,次の SQL 文を実行して販売価格を設定する。このとき,販売ランクが b の商品の販売価格の平均値は幾らか。
UPDATE 商品 SET 販売価格 =
CASE
WHEN 販売ランク = 'a' THEN 単価 * 0.9
WHEN 販売ランク = 'b' THEN 単価 - 500
WHEN 販売ランク = 'c' THEN 単価 * 0.7
ELSE 単価
END
商品
| 商品番号 | 商品名 | 販売ランク | 単価 | 販売価格 |
| 1001 | U | a | 2,000 | NULL |
| 2002 | V | b | 2,000 | NULL |
| 3003 | W | a | 3,000 | NULL |
| 4004 | X | c | 3,000 | NULL |
| 5005 | Y | b | 4,000 | NULL |
| 6006 | Z | d | 100 | NULL |
- ア1,675
- イ2,100
- ウ2,250
- エ2,500
答えと解説を見る
✓ これが正解エ2,500
解説
販売ランクがbの二行だけを平均して2500です。
この問題は計算そのものよりも、どの行を対象にするかを先に決められるかで差が付きます。見分けの軸は、拾った行が問われている区分と一致しているか、という一点です。問われているのは販売ランクがbの商品の平均だけですので、六行のうち該当する二行を取り出せば、残りは読む必要がありません。該当するのは商品番号2002と5005で、単価はそれぞれ2000と4000です。次に、その二行に当たる枝だけを読みます。UPDATE 文の中のCASE 式は、上から順に条件を見て、最初に当てはまった枝の値を返し、どれにも当てはまらなければ最後の枝の値を返す形になっています。bに当たる枝は単価から500を引くと定めていますので、更新後の販売価格は1500と3500です。平均は両者を足して二で割り、2500になります。別の道でも確かめられます。二つとも同じ500を引いてから平均を取ることと、先に平均を出してから500を引くことは同じですので、2000と4000の平均である3000から500を引いても2500です。SQL の計算問題では、対象の行を絞ってから、その行に当たる枝だけを読む順序を守ってください。
ほかの選択肢はなぜ違うのか
- ア1,675:この値は、販売ランクがb以外の四行を更新した後の平均です。1800と2700と2100と100を足して四で割ると得られます。設問が指定した絞り込みを無視して、残り全部を数えてしまった場合に現れます。
- イ2,100:この値は、販売ランクがcの行を更新した結果そのものです。単価3000に0.7を掛けると得られます。単価に掛け算をする枝のほうを読んでしまったときに出てくる数です。
- ウ2,250:この値は、販売ランクがaの二行を更新した後の平均です。2000と3000にそれぞれ0.9を掛けた1800と2700を足し、二で割ると得られます。拾う行を一つ手前の区分で取った場合の数になります。
出典:平成24年度 春期 応用情報技術者試験 午前 問26
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)