Menu
CoddyTech

Hàm RANK và DENSE_RANK

Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 65 trên 72.

ROW_NUMBER() là một loại hàm xếp hạng, còn có hai hàm khác là RANK() và DENSE_RANK().

Hàm RANK() đánh số các hàng như ROW_NUMBER(), nhưng gán cùng một số cho các hàng giống nhau và bỏ qua một số. DENSE_RANK() tương tự RANK(), nhưng không bỏ qua số nào.

Ví dụ:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Kết quả trả về sẽ là:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Giải thích:

  • ROW_NUMBER(): Luôn duy nhất: 1, 2, 3, 4, 5, 6
  • RANK():
    • cấp độ 5 (2 hàng): cả hai đều có thứ hạng 1
    • cấp độ 6 (2 hàng): cả hai đều có thứ hạng 3 (bỏ qua 2)
    • cấp độ 7 (2 hàng): cả hai đều có thứ hạng 5 (bỏ qua 4)
  • DENSE_RANK():
    • cấp độ 5 (2 hàng): cả hai đều có thứ hạng 1
    • cấp độ 6 (2 hàng): cả hai đều có thứ hạng 2 (không bỏ qua)
    • cấp độ 7 (2 hàng): cả hai đều có thứ hạng 3 (không bỏ qua)
challenge icon

Thử thách

Dễ

Các bảng và cột có sẵn:

  • medals: region, medal_color, medal_count

Tạo truy vấn hiển thị khu vực, tổng số huy chương (tổng của tất cả huy chương, không phân biệt màu sắc) và hai kiểu xếp hạng:

  1. Một regular_rank (có khoảng trống) dựa trên tổng số huy chương
  2. Một dense_rank (không có khoảng trống) dựa trên tổng số huy chương

Sắp xếp kết quả theo:

order by total_medals desc, region asc

Tự làm thử

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground SQL