問題
5【腕試し問題】結合×グループ化
中級問題で登場したグループ化とテーブル結合の合わせ技を使った問題となります。 それぞれの役割を再確認しながら問題を解いてみましょう。
SQLの問題に挑戦しよう!
問題
「【腕試し問題】結合×グループ化」
「koga」テーブルの講座を言語別に集計し、多い順にTOP3にして表示してください
出力項目は、langテーブルの「言語名」と集計数を表す「num」としましょう。
期待する画面を参考に作成してください。
期待する画面
解答と解説(【腕試し問題】結合×グループ化)
解説
※ご登録後トークルーム下部にあるメニュー内
「無料問題集※解答付き」を押すと
解答閲覧用URLが届きます
まずは出力する項目を書き出しましょう。
指定のある通り、langテーブルの「言語名」と集計数「num」を設定するのですが、「num」というカラムはないためASを使って別名で指定することが分かります。
表示すべきは言語ごとの講座名の集計値(データの数)なので、COUNT(koga.講座名)をASで「num」を指定します。
上記のように別テーブルの情報を同時に表示するには、kogaテーブルとlangテーブルを結合する必要があります。
結合するにはJOIN句を使って結合したいテーブル名を指定します。
JOIN句はON句とセットです。ON以降にはJOINで指定したテーブルのどの行をつなぐのかを結合条件として指定します。
結合ができたらカテゴリ別で集計するために必要なグループ化処理をGROUP BYを使って指定します。集計したい列を指定しましょう。
最後は降順の指定とLIMIT句で行数指定すれば完成です。
補足
今回の問題のように集計したデータを表示させたい場合は
集計関数(COUNTとかSUMとか)とGROUP BYがセットで思い浮かぶようにしておきましょう。
解説にある通り、テーブル結合はJOINとONです!