Trong hướng dẫn này, chúng ta sẽ tìm hiểu về hàm ROW_NUMBER[] của MySQL. Đây là một chức năng rất quan trọng và hữu ích có thể được sử dụng để giải quyết một số vấn đề phức tạp. Vì vậy, chúng ta sẽ hiểu nó với phần giới thiệu và cú pháp. Và cuối cùng, chúng ta sẽ xem một vài ví dụ về hàm ROW_NUMBER[], giúp chúng ta hiểu rõ hơn về chủ đề này
Cũng đọc. Câu lệnh DELETE JOIN của MySQL – Hướng dẫn đầy đủ
Giới thiệu Hàm ROW_NUMBER[]
ROW_NUMBER[] là một hàm cửa sổ trong MySQL được sử dụng để trả về số hàng hiện tại trong phân vùng của nó. Số hàng bắt đầu từ 1 và tăng lên đến số hàng phân vùng. Hàm ROW_NUMBER[] thường được sử dụng với mệnh đề ORDER BY để lấy kết quả xác định. Không có mệnh đề ORDER BY, việc đánh số hàng là không xác định
Nếu bạn không hiểu bất cứ điều gì từ định nghĩa trên, đừng lo lắng vì chúng ta sẽ xem các ví dụ ở đây với hình ảnh đầu ra. Để bạn có thể hiểu được hoạt động của hàm ROW_NUMBER[]
Cú pháp ROW_NUMBER[] của MySQL
Cú pháp của hàm ROW_NUMBER[] rất đơn giản như hình bên dưới
Code language: SQL [Structured Query Language] [sql]
ROW_NUMBER[] OVER [ ];
Ở đâu,
- ROW_NUMBER – Đây là hàm gán số hàng
- – Nó xác định cách bạn muốn hàm gán số hàng. Chẳng hạn như “PARTITION BY col_name” sẽ tạo phân vùng theo cột đã chỉ định và gán số hàng tương ứng. Nó là một tham số tùy chọn
- – Nó xác định thứ tự của dữ liệu bằng cách sử dụng mệnh đề ORDER BY
Bây giờ hãy xem một số ví dụ về hàm ROW_NUMBER[]
Các ví dụ về ROW_NUMBER[] của MySQL
Trước khi lấy các ví dụ, chúng tôi sẽ sử dụng bảng đã tạo của mô tả đã cho. Ngoài ra, bảng chứa dữ liệu giả cho các hoạt động
ví dụ 1. Thêm số hàng vào mỗi hàng
MySQL cung cấp cho chúng ta hàm ROW_NUMBER để gán số hàng. Đầu tiên, chúng ta sẽ xem cách gán số hàng bằng hàm ROW_NUMBER của MySQL và sau đó chúng ta sẽ xem cách thay thế mà không cần hàm
Đầu tiên, chúng tôi muốn gán các số cho mỗi hàng bất kể dữ liệu lặp lại. Điều này có nghĩa là ngay cả khi cùng một id khách hàng xuất hiện trong bảng hai lần trở lên, chúng tôi sẽ chỉ định một số duy nhất cho mỗi hàng
Code language: SQL [Structured Query Language] [sql]
SELECT *, ROW_NUMBER[] OVER[ORDER BY cust_id] as RN FROM customers;
Ở đây, chúng tôi đã sử dụng mệnh đề ORDER BY để sắp xếp dữ liệu đầu ra theo cột “cust_id”. Lưu ý rằng chúng ta không sử dụng mệnh đề PARTITION BY ở đây. Vì vậy, chúng tôi sẽ nhận được các số hàng duy nhất trong bảng như trong hình ảnh đầu ra
ví dụ 2. Thêm số hàng với phân vùng
Nếu bạn muốn chỉ định các số duy nhất cho các hàng duy nhất và các số tăng dần cho các bản ghi lặp lại thì sao? . Nếu có bất kỳ bản ghi duy nhất nào giữa các bản ghi này, thì hàng đó phải lấy 1 làm số hàng
Chúng ta có thể đạt được điều này bằng cách sử dụng câu lệnh PARTITION trong Hàm ROW_NUMBER
Code language: SQL [Structured Query Language] [sql]
SELECT *, ROW_NUMBER[] OVER[PARTITION BY name] as RC FROM customers;
Ở đây, chúng tôi đã sử dụng hàm ROW_NUMBER và tạo phân vùng theo cột “tên” của bảng. Bằng cách đó, các hàng duy nhất sẽ nhận được số hàng 1 và các hàng lặp lại sẽ nhận được số hàng là +1 từ số lượng hàng trước đó, như thể hiện trong kết quả ở trên
Trong truy vấn trên, chúng ta cũng có thể sử dụng “cust_id” thay vì “name” cho phân vùng
ví dụ 3. MySQL ROW_NUMBER Sử dụng Biến phiên
Trong ví dụ trước, chúng ta đã gán số cho các hàng bằng hàm ROW_NUMBER. Bây giờ chúng ta sẽ tìm hiểu cách gán số hàng bằng biến phiên
Đây là một phương pháp thay thế dễ dàng cho ví dụ trước và việc thực hiện nó rất đơn giản. Hãy xem nào
Code language: SQL [Structured Query Language] [sql]
SET @row_num=0; SELECT [@row_num:=@row_num+1] as RC, cust_id, name, occupation, age FROM customers ORDER BY age;
Đầu tiên, chúng tôi đã đặt biến phiên và khởi tạo nó thành 0
Thứ hai, chúng tôi tăng giá trị của biến phiên lên 1 mỗi khi hàng được tìm nạp từ bảng
Thứ ba, chúng tôi đã sử dụng mệnh đề ORDER BY để sắp xếp dữ liệu theo độ tuổi của khách hàng
Bây giờ hãy xem một đầu ra
Như bạn có thể thấy, chúng tôi đã nhận được đầu ra mong đợi
Phần kết luận
Trong hướng dẫn này, chúng ta đã tìm hiểu hàm ROW_NUMBER và cú pháp của nó là gì. Chúng tôi cũng đã xem qua một số ví dụ để hiểu hoạt động của hàm ROW_NUMBER thông qua các hình ảnh đầu ra. Có rất nhiều ứng dụng của hàm ROW_NUMBER
Tuy nhiên, đây là hướng dẫn giới thiệu về hàm ROW_NUMBER và chúng tôi sẽ tạo một hướng dẫn chi tiết về một loạt các trường hợp sử dụng thực tế của nó. Cho đến lúc đó, hãy thực hành càng nhiều càng tốt để hiểu chủ đề một cách tốt nhất