導入記事にある通りエクセルの神髄さんのSQL基礎問題にチャレンジしていきます。
ExcelでSQLを使う方法については上記の記事を参照してください。
お題
【SQL問題】
— エクセルの神髄【エクセル事務員】 (@yamaoka_ss) 2025年10月30日
以下のテーブル構成とサンプルデータに基づき、「分類ID,分類名」ごとの「売上金額(単価*数量)の合計」を算出するSQLを作成してください。
T01:伝票番号,日付,商品ID,数量
M01:商品ID,分類ID,単価
M02:分類ID,分類名
各テーブル定義と出力結果は画像を参照してください。 pic.twitter.com/uHP4y2M8FP
言語化
- テーブルT01とテーブルM01を商品IDをキーに結合
- テーブルM01とテーブルM02を分類IDをキーに結合
- 3つテーブルが結合されたテーブルを、分類ID・分類名事にグループ化
SQL化
まずはテーブルT01とテーブルM01を左外部結合で結合します。
テーブルT01の購入情報に商品IDをキーとしてテーブルM01の商品情報が紐づけられます。
select * from ( [Q5$A2:D7] as T01 left join [Q5$F2:H7] as M01 on T01.商品ID = M01.商品ID )
3つ以上のテーブルの結合条件
次に上記結合されたテーブルにさらにテーブルM02を同じく左外部結合で結合します。
結合キーはM01とM02の分類IDとします。
ここでは括弧の付け方に気をつける必要があります。
3つ以上のテーブルを結合する際には、括弧で囲む必要があります。
まず1つ目のテーブルと2つ目のテーブルの結合条件を記載して括弧で括ります。
次に先程の結合条件の後に3つ目のテーブルの結合条件を記載して、再度全体を括弧で括ります。
この順番で記載することで正しく括弧を付けることが可能です。
1回目の結合:(テーブル1 JOIN テーブル2) 2回目の結合:((テーブル1 JOIN テーブル2) JOIN テーブル3)
select * from ( ( [Q5$A2:D7] as T01 left join [Q5$F2:H7] as M01 on T01.商品ID = M01.商品ID ) left join [Q5$J2:K6] as M02 on M01.分類ID = M02.分類ID )

M01 の分類IDと M02 の分類IDをキーに結合することで、3つ目のテーブルを結合することで各商品情報に商品の分類を紐づけることができました。
最後に分類IDと分類名でグループ化してそのグループの合計金額を算出します。
select M01.分類ID , 分類名 , sum(数量 * 単価) as 金額 from ( ( [Q5$A2:D7] as T01 left join [Q5$F2:H7] as M01 on T01.商品ID = M01.商品ID ) left join [Q5$J2:K6] as M02 on M01.分類ID = M02.分類ID ) group by M01.分類ID , 分類名
まとめ
結合条件自体は最もシンプルな条件ですが、3つ以上のテーブルを結合する際の括弧の付け方がいつも悩むところでした。
今回のチャレンジで括弧の付け方をうまく言語化できた気がします。

