始める無料で始める

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_idid を選択してくださいう。
  • 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;
コードを編集して実行