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ố.
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 > ____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
2Điều kiện
Kiến thức cơ bản về điều kiệnTừ khóa ANDTừ khóa ORTừ khóa NOTKết hợp nhiều điều kiệnDấu ngoặc đơnGiá trị logic8Thống kê
Hàm tổng hợp tích hợp sẵn phần 1Hàm tổng hợp tích hợp sẵn phần 2Nhóm dữ liệu phần 1Nhóm dữ liệu phần 2Truy vấn con phần 1Truy vấn con phần 2Ôn tập: cửa hàng Total GainÔn tập: cửa hàng xe tay gaÔn tập: quán cà phê11Hàm cửa sổ, phần 1
Hàm ROW_NUMBERTiêu chí ORDER BYTiêu chí PARTITION BYPARTITION và ORDERCác hàm LEAD và LAGÔn tập: LEAD và LAGÔn tập: hình ảnhÔn tập: hộp3Định dạng giá trị trả về cụ thể
Giá trị nullSắp xếp kết quả phần 1Sắp xếp kết quả phần 2Ôn tập: Công ty an ninh mạngGiới hạn số bản ghiÔn tập: Nhà máy sản xuất xe6Thử thách nhập môn
Ôn tập: bầu cử quốc hộiÔn tập: cảnh sát bắt giữ tội phạmÔn tập: vật chứa đồ uống tại quầy barÔn tập: kỹ sư tạo cột mớiTự luyện tập: Playground SQL