Dùng CASE và AVG để suy ra tỉ lệ
Các câu lệnh CASE sẽ trả về bất kỳ giá trị nào bạn chỉ định trong mệnh đề THEN. Đây là một công cụ cực kỳ mạnh để tính toán và xử lý dữ liệu khi dùng cùng với hàm tổng hợp. Một nhiệm vụ quan trọng bạn có thể làm là dùng CASE bên trong hàm AVG để tính tỉ lệ (fraction) của thông tin trong cơ sở dữ liệu.
Đây là ví dụ cách bạn thiết lập:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
Với cách tiếp cận này, điều quan trọng là chỉ rõ chính xác bản ghi nào được tính là 0, nếu không phép tính của bạn có thể sai!
Nhiệm vụ của bạn là xem số trận thắng, thua và hòa ở mỗi quốc gia. Bảng matches đã được lọc để bao gồm tất cả các trận từ mùa giải 2013/2014 và 2014/2015.
Bài tập này là một phần của khóa học
Xử lý dữ liệu trong SQL
Hướng dẫn bài tập
- Bên trong hàm
AVG(), hãy hoàn thiện câu lệnhCASEbằng cách kiểm tram.home_goalkhácm.away_goal, gán giá trị0nếu điều kiện này đúng. - Lặp lại quy trình để so sánh số bàn sân nhà và sân khách trong
'2014/2015', đặt bí danh làties_2014_2015.
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.
SELECT
c.name AS country,
-- Calculate the fraction of tied games in each season
___(___ ___ m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
WHEN m.season='2013/2014' AND m.home_goal ___ m.away_goal THEN ___
END) AS ties_2013_2014,
___(___ ___ m.season='2014/2015' ___ ___ = ___ ___ ___
WHEN m.season='2014/2015' ___ m.home_goal != m.away_goal THEN ___
___) AS ___
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;