平成26年度 春期 午前Ⅱ 問16
データ操作
相関副問合せに関する問題
“商品月間販売実績”表に対して,SQL 文を実行して得られる結果はどれか。
商品月間販売実績
| 商品コード | 総販売数 | 総販売金額 |
|---|---|---|
| S001 | 150 | 45,000 |
| S002 | 250 | 50,000 |
| S003 | 150 | 15,000 |
| S004 | 400 | 120,000 |
| S005 | 400 | 80,000 |
| S006 | 500 | 25,000 |
| S007 | 50 | 60,000 |
〔SQL 文〕
SELECT A.商品コード AS 商品コード, A.総販売数 AS 総販売数
FROM 商品月間販売実績 A
WHERE 3 > (SELECT COUNT(*) FROM 商品月間販売実績 B
WHERE A.総販売数 < B.総販売数)
選択肢は原典では商品コード・総販売数の表(各3行)。各肢の行を上から順に並べた。
- ア商品コード:S001,S003,S006 / 総販売数:150,150,500
- イ商品コード:S001,S003,S007 / 総販売数:150,150,50
- ウ商品コード:S004,S005,S006 / 総販売数:400,400,500
- エ商品コード:S004,S005,S007 / 総販売数:400,400,50
答えと解説を見る
✓ これが正解ウ商品コード:S004,S005,S006 / 総販売数:400,400,500
解説
自分より総販売数が多い商品が3未満の行、つまり上位3件が残ります。
副問合せは、外側の行 A ごとに、A より総販売数が多い行 B の数を数えます。WHERE 3 > その数なので、自分より多い商品が2件以下の行だけが残ります。各行で数えると、S006(500)は0件、S004 と S005(400)は500の1件だけ、S002(250)は400、400、500の3件、S001 と S003(150)は4件、S007(50)は6件です。0件と1件の S006、S004、S005 が残り、S002 は 3 > 3 が成り立たないので外れます。結果は S004(400)、S005(400)、S006(500)の3行です。これは相関副問合せで、自分より大きいものの数を数えて順位を求める形で、同じ値の行は同じ順位として扱われます。
ほかの選択肢はなぜ違うのか
- ア商品コード:S001,S003,S006…:S001、S003、S006 は、総販売金額の小さい順に3件を取った組合せです(15,000、25,000、45,000)。この SQL 文が比べるのは総販売数で、金額は条件に出てこないので、この結果にはなりません。
- イ商品コード:S001,S003,S007…:S001、S003、S007 は、自分より総販売数が少ない行が3件未満の行、つまり総販売数の少ない3件です。比較の不等号の向きを逆にした場合の結果で、多い側の上位3件を求めるこの文とは逆になります。
- エ商品コード:S004,S005,S007…:S004、S005、S007 は、総販売金額の大きい順に3件を取った組合せです(120,000、80,000、60,000)。総販売数で比べると S007 は50で最も少なく、この SQL 文では残りません。
出典:平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問16
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)