Menu
CoddyTech

Hàm ROW_NUMBER

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

Hàm cửa sổ thực hiện phép tính trên một tập hợp các hàng trong bảng có liên quan đến hàng hiện tại. Khác với các hàm tổng hợp thông thường, hàm cửa sổ không gộp kết quả thành một hàng duy nhất.

Chúng đặc biệt hữu ích khi bạn cần:

  • Tính tổng lũy kế
  • Xếp hạng các mục trong nhóm
  • So sánh hàng hiện tại với hàng trước đó hoặc hàng tiếp theo
  • Phân tích xu hướng theo thời gian

Ví dụ, sau đây là một số trường hợp sử dụng hàm cửa sổ trong thực tế:

  • Phân tích doanh số
    • Tính doanh số lũy kế đến từng năm (1995, 1997, 1999)
    • Tìm các sản phẩm bán chạy nhất trong từng quý
  • Thống kê thể thao
    • Theo dõi số huy chương Olympic qua các năm
    • Xác định các vận động viên dẫn đầu trong từng kỳ thi đấu (2000, 2004, 2008)

ROW_NUMBER() là một trong những hàm cửa sổ đơn giản nhất. Hàm này gán một số thứ tự duy nhất cho mỗi hàng trong tập kết quả. Sau đây là cách sử dụng:

SELECT column1, column2,
       ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;

Bắt buộc phải dùng mệnh đề OVER với ROW_NUMBER(): ROW_NUMBER() OVER ()

Ví dụ:

SELECT product_name, sale_date,
       ROW_NUMBER() OVER () as row_num
FROM sales;

Thao tác này thêm một cột row_num để đếm từ 1 đến tổng số hàng.

Lưu ý: Mệnh đề OVER có thể chứa các chỉ dẫn sắp xếp và phân vùng để kiểm soát cách đánh số.

challenge icon

Thử thách

Dễ

Các bảng và cột hiện có:

  • liquids: id, density

Lấy tất cả chất lỏng có mật độ lớn hơn 5.677.

Đánh số kết quả (dùng hàm ROW_NUMBER()) và đặt tên cho cột này là row_num

Tự làm thử

-- Đánh số từng hàng trong kết quả đã lọc bằng hàm cửa sổ (window function)
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____
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