第10問
下表は、いくつかの商品の2009年月日から日までの売上履歴である。表 の行を件の販売履歴としたとき、件以上の販売履歴がある商品について、そ の商品名、販売件数、販売数量の平均、を求め、それらを販売数量の平均の降順に 表示したい。それを行うためのSQL 文を下記に示す。文中の空欄A~Dに入る記 述の組み合わせとして最も適切なものを下記の解答群から選べ。
- ア A:COUNT(*) B:COUNT(*)>2 C:WHERE D:ASC
- イ A:COUNT(*) B:COUNT(*)>=2 C:ORDER BY D:DESC
- ウ A:COUNT(商品名) B:COUNT(商品名)>1 C:WHERE D:DESC
- エ A:COUNT(商品名) B:COUNT(商品名)>=2 C:ORDER BY D:ASC ― 10― ◇M6(557―152)
▼ 解答・解説を見る
正解:イ
解答:イ
〔リード〕商品ごとに「販売件数・販売数量の平均」を集計し、件数が一定以上の商品だけを抽出して平均の降順で表示するSQLを完成させる。商品名でGROUP BYした集計に対する条件・並べ替えを考える。
- A:販売件数(行数)は
COUNT(*)で数える。COUNT(商品名)でも可だがNULLを除く点が異なり、件数カウントの素直な表現はCOUNT(*)。 - B:「件以上の販売履歴がある商品」を抽出する集計後の条件はHAVING句で、件数が基準値以上を表す
COUNT(*)>=2(「2件以上」)が適切。>2は「3件以上」となり不適。 - C:販売数量の平均で並べ替えるのは
ORDER BY。WHEREは集計前の行条件であり並べ替えではない。 - D:降順は
DESC(ASCは昇順)。
これらを満たす組み合わせは A:COUNT()、B:COUNT()>=2、C:ORDER BY、D:DESC。
- ア(×):Bが
COUNT(*)>2(3件以上)で「2件以上」と不一致、C・DもWHERE・ASCで誤り。 - イ(○):上記すべてを満たす。
- ウ(×):Bが
>1(実質2件以上だが)でも、D=DESCは可だがC=WHEREが誤り。 - エ(×):C=ORDER BYは正しいがD=ASC(昇順)が「降順」と不一致。
よって イ。