Mysql dày đặc_rank

Hướng dẫn này sẽ nghiên cứu sâu hơn về cách thức hoạt động của chức năng dày đặc MySQL và cách chúng ta có thể sử dụng nó trong các hoạt động cơ sở dữ liệu khác nhau. Nếu bạn muốn làm theo hướng dẫn này, hãy cân nhắc tải xuống cơ sở dữ liệu mẫu Sakila từ tài nguyên được cung cấp bên dưới

https. // nhà phát triển. mysql. com/doc/index-khác. html

Sử dụng cơ bản

Hàm MySQL DENSE_RANK() hiển thị thứ hạng của một hàng trong một phân vùng không có khoảng trống. Xếp hạng của các hàng tăng thêm giá trị 1 từ giá trị xếp hạng duy nhất của hàng trước đó

Cú pháp chung của hàm DENSE_RANK() như sau

CHỌN col1 DENSE_RANK () QUA (PARTITION BY {expr} ORDER BY {expr} [ASC|DESC] ) rank_col_name TỪ tb_name

Hãy để chúng tôi kiểm tra cú pháp truy vấn trên chặt chẽ hơn

Hàm DENSE_RANK() liên kết với mệnh đề SELECT, mệnh đề này sẽ hiển thị thứ hạng của các hàng từ bảng được chỉ định

Các phần DENSE_RANK() Over trả về kết quả của hàm DENSE_RANK() và đầu ra được giữ trong tên cột được chỉ định

Mệnh đề partition by chia kết quả trả về bởi mệnh đề FROM thành các partition. Hàm DENSE_RANK() được áp dụng cho từng phân vùng

Cuối cùng, phần ORDER BY chỉ định thứ tự của các hàng đã đặt trong mỗi phân vùng

Trường hợp sử dụng ví dụ

Hãy sử dụng một cơ sở dữ liệu mẫu để minh họa cách chúng ta có thể sử dụng hàm DENSE_RANK(). Đối với ví dụ này, chúng ta sẽ sử dụng cơ sở dữ liệu Sakila và cụ thể hơn là bảng phim trong cơ sở dữ liệu Sakila

Sử dụng hàm DENSE_RANK(), chúng ta có thể xếp hạng các bộ phim theo tỷ lệ cho thuê của chúng, như được hiển thị trong truy vấn bên dưới

SỬ DỤNG sakila ;
CHỌN tiêu đề , release_year, rating, length, DENSE_RANK() OVER (PARTITION BY release_year ORDER BY rental_rate ASC) rank_value FROM film;

Do lượng dữ liệu trên cơ sở dữ liệu Sakila rất lớn, tôi sẽ sắp xếp lại đầu ra để dễ đọc và minh họa hơn

Đầu ra dưới đây

Mysql dày đặc_rank

Mysql dày đặc_rank

Mysql dày đặc_rank

Nếu bạn xem kỹ kết quả ở trên, bạn sẽ nhận thấy rằng kết quả đầu ra nằm trong khoảng từ hạng 1 đến hạng 3, tương ứng với các giá trị cho thuê_rate trong bảng phim. Các giá trị Rent_rate là

  1. 0. 99 – hạng 1
  2. 2. 99 – hạng 2
  3. 4. 99 – hạng 3

Trong ví dụ trên, chúng tôi đã sử dụng mệnh đề partition by để chia các tập kết quả thành các phân vùng khác nhau, trong trường hợp này là release_year

Tiếp theo, chúng tôi đã sử dụng thứ tự MySQL theo câu lệnh để sắp xếp các bộ phim theo tỷ lệ cho thuê theo thứ tự tăng dần. Cuối cùng, chúng tôi đã áp dụng hàm DENSE_RANK() trên từng phân vùng được chỉ định theo thứ tự theo câu lệnh

Sự kết luận

Trong hướng dẫn này, chúng tôi đã giải thích cách hoạt động của hàm DENSE_RANK() trong cơ sở dữ liệu và sử dụng một ví dụ thực tế để minh họa cách sử dụng hàm này

Một chức năng cửa sổ trong MYSQL thường để tính toán một tập hợp các hàng liên quan đến hàng hiện tại. Hàng hiện tại là hàng mà hàm dựa vào để tính toán. Hàm cửa sổ được thực hiện một phép tính tương tự như khi sử dụng các hàm tổng hợp (hàm tổng hợp). Nhưng không giống các hàm tổng hợp thực hiện thao tác trên toàn bộ bảng, hàm windown không trả về kết quả được tổng hợp thành một hàng. Vd. Hàm đếm(row_name) trả về một hàng chứa số lượng hàng của câu truy vấn. Còn với chức năng cửa sổ, nó thao tác với một tập hợp các hàng và tạo ra một kết quả phù hợp với từng hàng. Điều này cho phép mỗi hàng có thể duy trì sự độc lập của mình

1. Cú pháp của chức năng cửa sổ

Dưới đây là cú pháp mẫu của chức năng cửa sổ

   window_function_name(expression)   
   OVER (  
       [partition_defintion]  
       [order_definition]  
       [frame_definition]  
   )  

Trong cấu trúc trên, đầu tiên là tên của hàm kèm theo một biểu thức. Sau đó chúng ta chỉ định mệnh đề QUÁ bao gồm 3 biểu thức. định nghĩa_phân vùng, định nghĩa_thứ tự, định nghĩa_khung.
Các loại chức năng cửa sổ thường gặp là.

  • Thứ hạng(). Trả về thứ tự của hàng hiện tại. Thứ tự sắp xếp không liên tục. VD. 1,2,2,4,…
  • Desen_rank() return thứ tự sắp xếp liên tục. VD. 1,2,2,3,…
  • Row_number() return number. VD. 1,2,3,4
  • First_value() return first value
  • Last_value() return the end value

2. Phân vùng mệnh đề

Mệnh đề này được sử dụng để lọc bảng dựa trên các thuộc tính của các vùng. Chức năng cửa sổ được kích hoạt trong từng vùng, khi vượt qua ranh giới của vùng đó, nó sẽ được khởi động lại. Dưới đây là cú pháp của mệnh đề.
______2
Trong cú pháp này, chúng ta có thể truyền 1 hoặc nhiều biểu thức ngăn cách nhau bằng dấu phẩy.

3. Mệnh đề sắp xếp theo

Mệnh đề này dùng để sắp xếp các hàng trong một vùng với cú pháp.
______3
Chúng ta có thể sắp xếp nhiều trường theo các thứ hạng khác nhau. Mệnh đề có thể định nghĩa một hoặc nhiều điều kiện ngăn chặn các bờ biển khác nhau.

4. Khung mệnh đề

Một khung là một tập tin hiện tại của vùng như hình vẽ.

Mysql dày đặc_rank

The ta could create ra 1 frame theo cú pháp.
______4
Trong cú pháp frame_unit có 2 giá trị để lựa chọn ROWS hoặc RANGE.

  • ROWS tạo khung dựa trên số lượng với hàng hiện tại. n trước và sau
  • RANGE thì dựa trên tính chất của hàng. vô biên trước, vô ký sau.
    Nếu không khai báo giá trị mặc định cho mệnh đề này là.
    ______5

5. Ví dụ

Với bài Leetcode 185. Bộ phận Ba mức lương hàng đầu.
Liên kết. https. //leetcode. com/problems/department-top-ba-salaries
Với đề bài yêu cầu tìm ra 3 mức lương cao nhất tại mỗi bộ phận.

Mysql dày đặc_rank

Ta có lời giải thích như sau.

select Department, Employee, Salary from 
(select dense_rank() over(partition by d.id order by e.salary desc ) as r, d.name as Department, e.name as Employee, e.salary from Employee e 
inner join Department d on d.id = e.departmentId) as t where t.r <4

6. Các liên kết tham khảo

  • Bài viết. https. //www. javatpoint. com/mysql-window-functions
  • Ví dụ về khung. https. //www. chuyên viên máy tính. org/frame-clause-in-sql/