Chuyển đến nội dung chính
Mô-đun 13 · Bài học 3 trong tổng số 451/57 trong khóa học~15 min
Bài học theo mô-đun (3/4)

Xếp hạng: ROW_NUMBER, RANK và DENSE_RANK

Xếp hạng: ROW_NUMBER, RANK và DENSE_RANK

Ngoài việc tổng hợp, các chức năng của cửa sổ còn tỏa sáng trong việc sắp xếp và xếp hạng. Có các chức năng được thiết kế đặc biệt để hoạt động bên trong cửa sổ (OVER() trở thành bắt buộc) để gán số thứ tự hoặc vị trí xếp hạng.

Để làm cho chúng hoạt động theo một tiêu chí, chúng ta phải sử dụng mệnh đề ORDER BY bên trong OVER().

Bộ ba xếp hạng

  1. ROW_NUMBER(): Gán một số thứ tự đơn giản (1, 2, 3...) cho mỗi hàng, ngắt kết nối tùy ý.
  2. RANK(): Tạo hiệu ứng "Olympics": 1, 2, 2, 4. Nó để lại một khoảng trống ("3" bị bỏ qua) và ấn định cùng thứ hạng trong trường hợp hòa.
  3. DENSE_RANK(): Tăng thứ hạng: 1, 2, 2, 3. Không bao giờ có khoảng cách sau khi hòa.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

Bằng cách kết hợp PARTITION BY và ORDER BY với nhau bên trong OVER() chúng ta có thể có được "3 người đứng đầu cho mỗi danh mục"!

tập thể dục#sql.m13.l3.e1
Nỗ lực: 0Đang tải…

Trích xuất 'first_name', 'last_name' và 'id' từ bảng khách hàng ('khách hàng') (giả sử 'id' là số nhận dạng). Thêm cột 'xếp hạng' bằng cách sử dụng DENSE_RANK() dựa trên 'id' giảm dần (từ cao nhất đến thấp nhất).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

DENSE_RANK() QUÁ(ĐẶT HÀNG THEO id DESC).

Giải pháp khả dụng sau 3 lần thử

tập thể dục#sql.m13.l3.e2
Nỗ lực: 0Đang tải…

Xây dựng thứ hạng cho mỗi 'category_id' dựa trên giá của sản phẩm ("sản phẩm"). Trích xuất 'category_id', 'id', 'price' và thêm 'price_rank' bằng cách sử dụng ROW_NUMBER() theo thứ tự 'price' giảm dần, phân vùng theo 'category_id'.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Kết hợp THAM GIA THEO danh mục_id ĐẶT HÀNG THEO giá DESC bên trong QUÁ.

Giải pháp khả dụng sau 3 lần thử