2026年中小企業診断士試験経営情報システム解説 第8問 SQL
第8問は、SQLの全文を理解しなくても「SUM/COUNT/DESC/ASC」の4語を拾えば解ける問題です。
第8問 SQL
ある小売店では、以下に示す「販売記録」表を用いて販売管理を行っている。
販売記録

顧客や商品の販売傾向を分析するために、この「販売記録」表からいくつかの表を作成するSQL文を考えた。次のSQL文①とSQL文②に対する説明文a~fの組み合わせとして、最も適切なものを選ぶ問題です。
SQL文①
SELECT 顧客ID, SUM(販売金額) AS 合計
FROM 販売記録
GROUP BY 顧客ID
ORDER BY 合計 DESC;SQL文②
SELECT 商品ID, COUNT(顧客ID) AS 総数
FROM 販売記録
GROUP BY 商品ID
ORDER BY 総数 ASC;説明文
a 顧客ID、および顧客IDごとの販売金額の合計を、合計額の小さい順に表示する。
b 顧客ID、および顧客IDごとの販売金額の合計を、合計額の大きい順に表示する。
c 顧客ID、および顧客IDごとの販売商品数の合計を、合計数の多い順に表示する。
d 商品ID、および商品IDごとに販売したユニーク顧客数(同一顧客IDの重複を除く)の総数を、総数の多い順に表示する。
e 商品ID、および商品IDごとに販売したユニーク顧客数(同一顧客IDの重複を除く)の総数を、総数の少ない順に表示する。
f 商品ID、および商品IDごとに販売した延べ顧客数(同一顧客IDの重複を含む)の総数を、総数の少ない順に表示する。
〔解答群〕
ア SQL文①:a SQL文②:d
イ SQL文①:a SQL文②:e
ウ SQL文①:b SQL文②:e
エ SQL文①:b SQL文②:f
オ SQL文①:c SQL文②:f
正解
エ(SQL文①:b、SQL文②:f)
SQL文①の解説
まず見るべきは、この3カ所です。
SUM(販売金額)
GROUP BY 顧客ID
ORDER BY 合計 DESC
GROUP BY 顧客ID
顧客IDごとにデータをまとめます。
SUM(販売金額)
まとめた顧客ごとに、販売金額を合計します。
したがって、
顧客IDごとの販売金額の合計
を求めています。
ここまででaかbです。
DESC
DESCは降順です。
つまり、大きいものから小さいものへ並べます。
したがって、
SQL文①=b
です。
aは「小さい順」なので誤り、cは販売商品数を求めているわけではないので誤りです。
SQL文②の解説
こちらは、
COUNT(顧客ID)
GROUP BY 商品ID
ORDER BY 総数 ASC
を見ます。
GROUP BY 商品ID
商品ごとにまとめます。
COUNT(顧客ID)
その商品について、顧客IDが何件出てきたかを数えます。
重要なのは、SQL文にDISTINCTがないことです。
そのため、同じ顧客が何度登場しても、その都度カウントします。
つまり求めているのは、
ユニーク顧客数ではなく、延べ顧客数
です。
したがって、dとeは除外できます。
ASC
ASCは昇順です。
つまり、小さいものから大きいものへ並べます。
よって、
SQL文②=f
となります。
したがって正解は、エです。
初見でこの問題に当たったらどう解くか
正直言って、昨今SQL問題は難化しています。今回も基本知識だけで解けない内容でした。
そのなかで、どのようにアプローチするかですが、この問題は、SQL文を最初から最後まで読もうとすると難しく見えます。
実際には、次の4つだけ拾えば解けます。
SQL 意味
SUM 合計
COUNT 件数を数える
DESC 大きい順
ASC 小さい順
まずSQL文①。
SUM=合計、DESC=大きい順
なので、ほぼ瞬時にbです。
ここで解答群を見ると、
b+e
b+f
のウかエまで絞れます。
次にSQL文②。
COUNT(顧客ID)と書いてあるだけで、DISTINCTはありません。
つまり重複を除いていないため、ユニーク顧客数ではなく延べ顧客数です。
したがってfとなり、エに確定します。
DISTINCTを知らなかった場合でも
ここも重要です。
d・eにはわざわざ、
「同一顧客IDの重複を除く」
と書かれています。
しかしSQL文②には、重複を除くような特別な処理が書かれているようには見えません。
一方、COUNT(顧客ID)は素直に読めば、
「顧客IDが何個あるか数える」
と考えられます。
そのため、SQLに詳しくなくても、「単純に数えるなら重複も含むのでは?」とfを選ぶ余地があります。DISTINCT知らなくてもいいのです。
試験上のポイント
第8問は、一見すると長い表とSQLが出てくるため時間がかかりそうに見えます。
しかし実際には、販売記録の具体的な数字をほとんど計算する必要がありません。
SUM/COUNT/ASC/DESCを確認するだけで処理できる問題です。
こうした問題では、表の数字を一つずつ追い始める前に、
「本当に計算が必要なのか?」
を確認することが重要です。
この問題は、SQLが苦手な受験生でも、必要なキーワードだけ拾えば十分に正解を狙える問題だったと思います。
SQL分の難易度の高い問題は、まず基礎知識で3択に絞れます。そこから、合理的な判断で選択肢を類推する、というアプローチを試してください。
ちなみに、ASCとDESCの違いは、
ASC:Aから始まり大きなアルファベットに行く=>昇順
という覚え方がいいかな。
人によっては、音楽のdecrescendoを思い出してもらって、だんだん音を弱く(小さく)していくという意味=>小さくなるでいいかもしれませんね。
それでは次回は第9問!