开始使用免费开始使用

用 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;

您可以在主查询之前先"声明"一个或多个子查询为公用表表达式(CTE),这是一种很好的方式,用于组织信息并使逻辑更清晰。

在本练习中,我们将使用一个 CTE 来改写一个类似的查询。

本练习是课程的一部分

SQL 中的数据处理

查看课程

练习说明

  • 完成语法以声明您的 CTE。
  • 在 CTE 中从 match 表选择 country_id 和比赛 id
  • 使用 country_id 将该 CTE 与 league 表进行 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;
编辑并运行代码