Bắt đầu ngayBắt đầu miễn phí

Dọn gọn với CTE

Trong chương 2, bạn đã tạo danh sách các quốc gia và số trận đấu ở mỗi quốc gia có hơn 10 bàn thắng. Truy vấn trong bài tập đó sử dụng một truy vấn lồng trong mệnh đề FROM để lọc các trận đấu trước khi đếm chúng trong truy vấn chính. Dưới đây là truy vấn bạn đã viết:

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;

Bạn có thể liệt kê một (hoặc nhiều) truy vấn lồng nhau dưới dạng common table expressions (CTE) bằng cách khai báo chúng trước truy vấn chính. Đây là công cụ tuyệt vời để tổ chức thông tin và sắp xếp theo trình tự hợp lý.

Trong bài tập này, hãy viết lại một truy vấn tương tự bằng cách dùng CTE.

Bài tập này là một phần của khóa học

Xử lý dữ liệu trong SQL

Xem khóa học

Hướng dẫn bài tập

  • Hoàn chỉnh cú pháp để khai báo CTE của bạn.
  • Chọn country_idid của trận đấu từ bảng match trong CTE.
  • LEFT JOIN CTE với bảng league bằng country_id.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

-- 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;
Chỉnh sửa và Chạy Mã