1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Lập báo cáo trong SQL

Connected

Bài tập

Vận động viên giành nhiều huy chương nhất theo vùng

Mục tiêu của bạn trong bài tập này là hiển thị vận động viên giành nhiều huy chương nhất theo từng vùng. Để thiết lập báo cáo này, bạn cần tận dụng hàm cửa sổ ROW_NUMBER(), hàm này đánh số mỗi hàng bằng một số nguyên tăng dần: hàng đầu tiên là 1, hàng thứ hai là 2, v.v.

Cú pháp cho hàm cửa sổ này là ROW_NUMBER() OVER (PARTITION BY field ORDER BY field). Lưu ý rằng không có đối số nào bên trong phần hàm ban đầu.

Khi thiết lập đúng, row_num = 1 sẽ đại diện cho vận động viên giành nhiều huy chương nhất trong vùng đó. Nếu có nhiều vận động viên có tổng bằng nhau, bất kỳ ai trong số họ đều có thể xuất hiện ở vị trí đầu. Lưu ý bạn không thể dùng phép tính cửa sổ trong mệnh đề HAVING hoặc WHERE, vì vậy bạn sẽ cần dùng một truy vấn con để lọc.

Bạn có thể tham khảo Sơ đồ E:R. Chúng ta sẽ dùng summer_games_clean để tránh phải xử lý giá trị null.

Hướng dẫn 1/2

undefined XP
    1
    2
  • Viết truy vấn lấy region, athlete_name và total_golds bằng cách JOIN summer_games_clean, athletes và countries.
  • Thêm một trường tên row_num dùng ROW_NUMBER() để gán hạng trong vùng cho mỗi vận động viên dựa trên tổng số huy chương vàng đạt được.