メインコンテンツへスキップ

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問!

    あなたへのおすすめ