中小企業診断士 過去問
令和8年度(2026年)
問168 (経営情報システム 問8)

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

中小企業診断士試験 令和8年度(2026年) 問168(経営情報システム 問8) (訂正依頼・報告はこちら)

ある小売店では、以下に示す「販売記録」表を用いて販売管理を行っている。

顧客や商品の販売傾向を分析するために、この「販売記録」表からいくつかの表を作成する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

正解!素晴らしいです

残念...

この過去問の解説 (1件)

01

「SQL文①:b SQL文②:f」の組み合わせが当てはまります。

SQLとは、データベースから必要な情報を取り出したり、集計したりするための言語です。

SQL文①は、顧客ごとの販売金額の合計を、大きい順に表示する処理です。

一方、SQL文②は、商品ごとの延べ顧客数を、少ない順に表示する処理です。

この問題では、特に次の違いを理解することが重要です。

SUM:数値を合計する

COUNT:データの件数を数える

ASC:小さい順(昇順)に並べる

DESC:大きい順(降順)に並べる

また、COUNTでは、DISTINCTを指定しなければ、同じ顧客IDが複数回登場しても、それぞれを数えます。

 

SQL文①の解説

SELECT 顧客ID, SUM(販売金額) AS 合計
FROM 販売記録
GROUP BY 顧客ID
ORDER BY 合計 DESC;

このSQL文は、顧客ごとに販売金額を集計して、合計額の大きい順に表示します。

それぞれの命令を確認します。

SELECT 顧客ID, SUM(販売金額) AS 合計

顧客IDと、販売金額を合計した値を取り出します。

SUMは合計を求める関数です。

ASは、集計結果に名前を付けるために使用します。

ここでは、販売金額の合計に「合計」という名前を付けています。

FROM 販売記録

「販売記録」という表からデータを取り出します。

GROUP BY 顧客ID

顧客IDが同じデータを1つのグループにまとめます。

これによって、顧客ごとの販売金額を合計できます。

ORDER BY 合計 DESC

販売金額の合計を、大きい順(降順)に並べます。

つまり、販売金額が最も多い顧客から順番に表示されます。

したがって、SQL文①はbに該当します。

SQL文②の解説

SELECT 商品ID, COUNT(顧客ID) AS 総数
FROM 販売記録
GROUP BY 商品ID
ORDER BY 総数 ASC;

このSQL文は、商品ごとに顧客IDの件数を数えて、少ない順に表示します。

SELECT 商品ID, COUNT(顧客ID) AS 総数

商品IDと、顧客IDの件数を取り出します。

COUNTはデータの件数を数える関数です。

ここでは、顧客IDがNULLではないレコードを数えています。

重要なのは、COUNT(顧客ID)では、同じ顧客IDが複数回登場しても、それぞれを数えることです。

例えば、同じ商品をAさんが3回、Bさんが1回購入した場合、COUNT(顧客ID)の結果は4になります。

これは、重複を含む延べ顧客数です。

一方、重複を除いたユニーク顧客数を数える場合は、次のように記述します。

COUNT(DISTINCT 顧客ID)

この場合、AさんとBさんの2人だけを数えるため、結果は2になります。

FROM 販売記録

「販売記録」という表からデータを取り出します。

GROUP BY 商品ID

商品IDが同じデータを1つのグループにまとめます。

これによって、商品ごとに顧客IDの件数を数えられます。

ORDER BY 総数 ASC

総数を、小さい順(昇順)に並べます。

つまり、延べ顧客数が少ない商品から順番に表示されます。

したがって、SQL文②はfに該当します。

選択肢4. SQL文①:b  SQL文②:f

適切です。

SQL文①は、SUMによって顧客ごとの販売金額を合計し、DESCによって合計額の大きい順に表示します。

SQL文②は、COUNTによって商品ごとの延べ顧客数を数え、ASCによって総数の少ない順に表示します。

したがって、この組み合わせが当てはまります。

まとめ

今回のSQL文で使用されている主な命令は、次のとおりです。

<SUM>

数値の合計を求める関数です。

例:SUM(販売金額)=販売金額の合計

<COUNT>

データの件数を数える関数です。

COUNT(顧客ID)では、同じ顧客IDが複数回登場しても、それぞれを数えます。

<COUNT(DISTINCT ...)>

重複を除いた件数を数えます。

例:COUNT(DISTINCT 顧客ID)=ユニーク顧客数

<GROUP BY>

同じ値を持つデータをグループにまとめます。

<ORDER BY ... ASC>

小さい順(昇順)に並べます。

<ORDER BY ... DESC>

大きい順(降順)に並べます。

この問題では、SUMとCOUNTの違い、COUNTとCOUNT(DISTINCT ...)の違い、ASCとDESCの違いを正しく理解することがポイントです。

したがって、最も適切な組み合わせは「SQL文①:b SQL文②:f」です。

参考になった数3