CTE で整理する
第2章では、総得点が 10 以上の試合の数を国ごとに集計したリストを作成しました。その時のクエリでは、メインクエリで集計を行う前に試合を絞り込むために、FROM 句にサブクエリを使用しました。作成したクエリは以下のとおりです。
SELECT
c.name AS country,
COUNT(sub.id) AS matches
FROM country AS c
INNER JOIN (
SELECT country_id, id
FROM match
WHERE (home_goal + away_goal) >= 10) AS sub
ON c.id = sub.country_id
GROUP BY country;
1 つ以上のサブクエリを共通テーブル式(CTE)でメインクエリの前に宣言することもできます。これは、情報を整理し、論理的な順序でクエリを構成するのに非常に便利です。
この練習では、上と同様のクエリを、CTE を使って書き直してみましょう。
この演習はコースの一部です
SQL のデータ操作
演習の手順
- CTE を宣言するための構文を完成させてください。
- CTE の中で、
matchテーブルからcountry_idとidを選択してくださいう。 country_idを使って、CTE をリーグテーブルにLEFT JOINしてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Set up your CTE
___ match_list ___ (
SELECT
country_id,
___
FROM match
WHERE (home_goal + away_goal) >= 10)
-- Select league name and count of matches from the CTE
SELECT
l.name AS league,
COUNT(match_list.id) AS matches
FROM league AS l
-- Join the CTE to the league table using country_id
LEFT JOIN ___ ON l.id = ___
GROUP BY l.name;