“商品”表に対して,次のSQL文を実行して得られる仕入先コード数は幾つか。
〔SQL文〕
SELECT DISTINCT 仕入先コード FROM 商品
WHERE(販売単価-仕入単価)>
(SELECT AVG(販売単価-仕入単価)FROM 商品)
商品/商品コード|商品名|販売単価|仕入先コード|仕入単価/A001|A|1,000|S1|800/B002|B|2,500|S2|2,300/C003|C|1,500|S2|1,400/D004|D|2,500|S1|1,600/E005|E|2,000|S1|1,600/F006|F|3,000|S3|2,800/G007|G|2,500|S3|2,200/H008|H|2,500|S4|2,000/I009|I|2,500|S5|2,000/J010|J|1,300|S6|1,000
正答3
解説
正解は3です。
副問合せを含むSQL文の実行結果として、何種類の仕入先コードが得られるかを求める問題です。
副問合せで全商品の(販売単価−仕入単価)の平均を求め、それより差額が大きい商品の仕入先コードを重複なしで取り出します。
【計算】
各商品の差額は、Aが200、Bが200、Cが100、Dが900、Eが400です。
Fが200、Gが300、Hが500、Iが500、Jが300です。
合計は3,600なので、平均は3,600÷10=360です。
差額が360を超えるのは、D(S1)、E(S1)、H(S4)、I(S5)の4商品です。
DISTINCTで重複を除くと、仕入先コードはS1、S4、S5の3種類です。
【選択肢別解説】
1:× 1種類では、S1だけを数えたことになり、S4とS5が抜けています。
2:× 2種類では、条件に当てはまる仕入先が一つ足りません。
3:○ S1、S4、S5の3種類が結果として得られます。
4:× 4は、条件を満たす商品の数です。
DISTINCTによりS1の重複が除かれるので、仕入先コード数は3です。
【ポイント】
DISTINCTは、結果の行から重複を取り除く指定です。
商品数と仕入先コード数を取り違えないように注意します。