开始使用免费开始使用

把 CTE 组合起来

现在您已经创建了两个子查询来识别主客场对手,是时候将查询重构为以 homeaway 子查询作为通用表表达式(Common Table Expressions,CTEs)。您会注意到主查询包含 SELECT DISTINCT。如果不只保留 DISTINCT 的比赛记录,您可能会为每场比赛返回一条重复记录。

继续完善查询,提取曼联在 2014/2015 赛季参加的所有比赛。

本练习是课程的一部分

SQL 中的数据处理

查看课程

练习说明

  • 在主查询之前声明 homeaway 两个 CTE。
  • 使用 LEFT JOIN 将您的 CTE 与 match 表连接。
  • 在主查询中从 CTE 中选择相关数据。
  • 在主查询中选择来自 match 的日期、来自 CTE 的球队名称,以及来自 match 的主队/客队进球数。

交互式实操练习

通过完成这段示例代码来试试这个练习。

-- Set up the home team CTE
___ ___ ___ (
  SELECT m.id, t.team_long_name,
	  CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
		   WHEN m.home_goal < m.away_goal THEN 'MU Loss' 
  		   ELSE 'Tie' END AS outcome
  FROM match AS m
  LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
  SELECT m.id, t.team_long_name,
	  CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
		   WHEN m.home_goal < m.away_goal THEN 'MU Win' 
  		   ELSE 'Tie' END AS outcome
  FROM match AS m
  LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select the date, team names and goals
SELECT DISTINCT
    ___.___,
    ___.___ AS home_team_name,
    ___.___ AS away_team_name,
    ___.___,
    m.away_goal
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
      AND (home.team_long_name = 'Manchester United' 
           OR away.team_long_name = 'Manchester United');
编辑并运行代码