Hàm cửa sổ số hàng trong MySQL

Mysql Row Number Window Function



Trong MySQL, phương thức ROW NUMBER () chứa số thứ tự thời gian cho mọi hàng bên trong phân vùng. Nó chỉ là một tính năng cửa sổ của một số loại. Hình các hàng bắt đầu từ 1 với hình các hàng trong phân vùng. Hãy nhớ rằng, trước phiên bản 8.0, MySQL không cho phép hàm ROW NUMBER (), tuy nhiên, nó cung cấp một biến phiên giúp bắt chước tính năng này. Chúng tôi sẽ hiểu thêm về chức năng ROW NUMBER () của MySQL trong suốt hướng dẫn này và tạo ra một số liên tiếp cho mọi hàng trong bộ sưu tập kết quả. Trong MySQL, các phương thức ROW_NUMBER () được sử dụng với các mệnh đề tiếp theo:

  • Mệnh đề Over () sẽ được sử dụng trong nó.
  • Mệnh đề ORDERS BY sắp xếp kết quả theo thứ tự sắp xếp của cột đã đề cập.

Cú pháp:

>> LỰA CHỌN col_name,SỐ LƯỢNG HÀNG()KẾT THÚC( VÁCH NGĂN THEO col_name, ĐẶT BỞI col_name) NHƯ row_num TỪ tên_bảng;

Hãy để chúng tôi mở trình bao khách dòng lệnh MySQL từ các ứng dụng và nhập mật khẩu để đăng nhập.









Bạn phải tạo một bảng mới hoặc sử dụng bảng mặc định để bắt đầu làm việc với chức năng số hàng. Như được trình bày trong hình ảnh dưới đây, chúng ta có một bảng động vật trong dữ liệu lược đồ với một số bản ghi trong đó. Hãy tìm nạp các bản ghi của nó bằng cách sử dụng lệnh SELECT.



>> LỰA CHỌN * TỪ dữ liệu .loài vật;





Ví dụ 01: ROW_NUMBER () Sử dụng Mệnh đề ORDER BY

Chúng ta sẽ sử dụng cùng một bảng để giải thích thêm về một số ví dụ về hàm số hàng. Chúng tôi đang lấy một ví dụ về hàm ROW_NUMBER () theo sau là Over (), trong khi chỉ sử dụng mệnh đề ORDER BY. Chúng tôi đã tìm nạp tất cả các bản ghi trong khi đánh số các hàng theo thứ tự cột Giá. Chúng tôi đã đặt tên row_num cho một cột, cột này sẽ lưu trữ số của hàng. Hãy thử lệnh dưới đây để làm như vậy.

>> LỰA CHỌN *,SỐ LƯỢNG HÀNG()KẾT THÚC( ĐẶT BỞI Giá bán) NHƯ row_num TỪ dữ liệu .loài vật;

Khi thực hiện truy vấn trên, chúng ta có thể thấy rằng các hàng đã được gán số theo thứ tự sắp xếp của cột Giá. Bạn có thể nghĩ rằng một số giá nhỏ hơn nên ở trên cùng của cột và nó sẽ sắp xếp theo điều đó. Nhưng mệnh đề ORDER BY chỉ xem chữ số hoặc bảng chữ cái đầu tiên của cột để sắp xếp các giá trị.



Hãy thực hiện cùng một truy vấn theo sau mệnh đề ORDER BY trong khi sử dụng thứ tự sắp xếp của cột Tuổi. Đầu ra sẽ được cung cấp theo cột Tuổi.

>> LỰA CHỌN *,SỐ LƯỢNG HÀNG()KẾT THÚC( ĐẶT BỞI Tuổi) NHƯ row_num TỪ dữ liệu .loài vật;

Ví dụ 02: ROW_NUMBER () Sử dụng mệnh đề PARTITION BY

Chúng tôi sẽ sử dụng mệnh đề PARTITION BY duy nhất trong truy vấn ROW_NUMBER () để kiểm tra kết quả. Chúng tôi đã sử dụng truy vấn SELECT để tìm nạp các bản ghi theo sau là ROW_NUMBER () và mệnh đề OVER, đồng thời phân vùng bảng theo Màu cột. Thực thi lệnh được nối thêm bên dưới trong trình bao lệnh.

>> LỰA CHỌN *,SỐ LƯỢNG HÀNG()KẾT THÚC( VÁCH NGĂN THEO màu sắc) NHƯ row_num TỪ dữ liệu .loài vật;

Bạn có thể thấy trong kết quả rằng số hàng đã được chỉ định trong các phân vùng, theo thứ tự sắp xếp màu sắc. Vì chúng ta có 4 giá trị cho màu Đen chiếm 4 hàng. Đó là lý do tại sao nó có số bốn hàng bắt đầu từ 1 đến 4 và ngược lại.

Hãy thử cùng một ví dụ, được phân vùng theo cột Giới tính lần này. Như chúng ta đã biết, chúng ta chỉ có hai giới tính trong bảng này, đó là lý do tại sao 2 phân vùng sẽ được hình thành. Con cái chiếm 9 hàng, đó là lý do tại sao nó có số hàng từ 1 đến 9. Trong khi con đực có 8 giá trị, đó là lý do nó có 1 đến 8.

>> LỰA CHỌN *,SỐ LƯỢNG HÀNG()KẾT THÚC( VÁCH NGĂN THEO giới tính) NHƯ row_num TỪ dữ liệu .loài vật;

Ví dụ 03: ROW_NUMBER () Sử dụng PARTITION BY & ORDER BY

Chúng tôi đã thực hiện hai ví dụ trên trong dòng lệnh MySQL, bây giờ đã đến lúc thực hiện ví dụ ROW_NUMBER () trong MySQL Workbench 8.0. Vì vậy, hãy mở MySQL Workbench 8.0 từ các ứng dụng. Kết nối MySQL Workbench với cơ sở dữ liệu gốc của máy chủ cục bộ để bắt đầu hoạt động.

Ở phía bên trái của MySQL Workbench, bạn sẽ tìm thấy thanh Schema, điều hướng. Trong thanh lược đồ này, bạn sẽ tìm thấy danh sách các cơ sở dữ liệu. Trong danh sách cơ sở dữ liệu, bạn sẽ có các bảng và các thủ tục được lưu trữ khác nhau, như bạn có thể thấy trong hình dưới đây. Chúng tôi có các bảng khác nhau trong ‘dữ liệu’ cơ sở dữ liệu của chúng tôi. Chúng tôi sẽ mở bảng ‘order1’ bằng lệnh SELECT trong vùng truy vấn để bắt đầu sử dụng nó cho việc triển khai hàm ROW_NUMBER ().

>> LỰA CHỌN * TỪ dữ liệu .order1;

Bảng thứ tự 1 đã được hiển thị trong khung nhìn lưới như hình dưới đây. Bạn có thể thấy nó có 4 trường cột, id, Region, Status và OrderNo. Chúng tôi sẽ tìm nạp tất cả các bản ghi của bảng này trong khi sử dụng mệnh đề ORDER BY và PARTITION BY, cả hai cùng một lúc.

Trong vùng truy vấn của MySQL Workbench 8.0, hãy nhập truy vấn được hiển thị bên dưới. Truy vấn đã được bắt đầu với mệnh đề SELECT, tìm nạp tất cả các bản ghi theo sau bởi hàm ROW_NUMBER () cùng với mệnh đề OVER. Sau mệnh đề OVER, chúng ta đã chỉ định cột Trạng thái được tiếp tục bởi câu lệnh PARTITION BY để chia bảng thành các phân vùng theo bảng này. Mệnh đề ORDER BY được sử dụng để sắp xếp bảng theo cách giảm dần theo khu vực cột. Số hàng sẽ được giữ trong cột row_num. Nhấn vào biểu tượng flash để thực hiện lệnh này.

Kết quả hiển thị bên dưới sẽ được hiển thị. Trước hết, bảng đã được tách thành hai phần theo giá trị của cột Trạng thái. Sau đó, nó đã được trình bày theo thứ tự giảm dần của cột ‘Vùng’ và các phân vùng đã được gán với số hàng.

Phần kết luận:

Cuối cùng, chúng tôi đã hoàn thành tất cả các ví dụ cần thiết trong việc sử dụng hàm ROW_NUMBER () trong MySQL Workbench và MySQL Command-line Client Shell.