
問題5:【腕試し問題】結合×グループ化
「koga」テーブルの講座を言語別に集計し、多い順にTOP3にして表示してください
出力項目は、langテーブルの「言語名」と集計数を表す「num」としましょう。
期待する画面を参考に作成してください。
出力項目は、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¥
補足
今回の問題のように集計したデータを表示させたい場合は
集計関数(COUNTとかSUMとか)とGROUP BYがセットで思い浮かぶようにしておきましょう。
解説にある通り、テーブル結合はJOINとONです!
集計関数(COUNTとかSUMとか)とGROUP BYがセットで思い浮かぶようにしておきましょう。
解説にある通り、テーブル結合はJOINとONです!
#忍者CODE無料問題集で活動を記録しよう
完了にする!
指定のある通り、langテーブルの「言語名」と集計数「num」を設定するのですが、「num」というカラムはないためASを使って別名で指定することが分かります。
表示すべきは言語ごとの講座名の集計値(データの数)なので、COUNT(koga.講座名)をASで「num」を指定します。
上記のように別テーブルの情報を同時に表示するには、kogaテーブルとlangテーブルを結合する必要があります。
結合するにはJOIN句を使って結合したいテーブル名を指定します。
JOIN句はON句とセットです。ON以降にはJOINで指定したテーブルのどの行をつなぐのかを結合条件として指定します。
結合ができたらカテゴリ別で集計するために必要なグループ化処理をGROUP BYを使って指定します。集計したい列を指定しましょう。
最後は降順の指定とLIMIT句で行数指定すれば完成です。