ログイン
問題5

【腕試し問題】結合×グループ化

中級問題で登場したグループ化とテーブル結合の合わせ技を使った問題となります。 それぞれの役割を再確認しながら問題を解いてみましょう。

アイコン画像

問題5:【腕試し問題】結合×グループ化

「koga」テーブルの講座を言語別に集計し、多い順にTOP3にして表示してください

出力項目は、langテーブルの「言語名」と集計数を表す「num」としましょう。

期待する画面を参考に作成してください。

ブラウザのアイコン期待する画面

解答の見本画像

タグアイコン解答ソースコード

              USE ninjacode;
SELECT lang.言語名, COUNT(koga.講座名) AS num
FROM koga
JOIN lang
ON lang.言語ID = koga.言語ID
GROUP BY lang.言語名
ORDER BY num DESC
LIMIT 3;
¥SQL¥
            

コメントのアイコン解説

まずは出力する項目を書き出しましょう。
指定のある通り、langテーブルの「言語名」と集計数「num」を設定するのですが、「num」というカラムはないためASを使って別名で指定することが分かります。
表示すべきは言語ごとの講座名の集計値(データの数)なので、COUNT(koga.講座名)をASで「num」を指定します。

上記のように別テーブルの情報を同時に表示するには、kogaテーブルとlangテーブルを結合する必要があります。
結合するにはJOIN句を使って結合したいテーブル名を指定します。
JOIN句はON句とセットです。ON以降にはJOINで指定したテーブルのどの行をつなぐのかを結合条件として指定します。

結合ができたらカテゴリ別で集計するために必要なグループ化処理をGROUP BYを使って指定します。集計したい列を指定しましょう。

最後は降順の指定とLIMIT句で行数指定すれば完成です。
ログインして解答を見る

コメントのアイコン補足

今回の問題のように集計したデータを表示させたい場合は
集計関数(COUNTとかSUMとか)とGROUP BYがセットで思い浮かぶようにしておきましょう。

解説にある通り、テーブル結合はJOINとONです!
SQLを学ぶなら現役エンジニア監修「甲賀コース」
キャンペーン

閉じる