Xếp hạng Postgres

Xep Hang Postgres



Trong PostgreSQL, hàm rank() là một hàm Window cho phép chúng ta gán thứ hạng cho từng hàng trong tập kết quả dựa trên tiêu chí sắp xếp đã cho. Giống như hầu hết các hàm cửa sổ, hàm xếp hạng có lợi trong các truy vấn phân tích, chẳng hạn như xác định thứ hạng của một hàng có liên quan đến các hàng khác trong một tập hợp kết quả nhất định.

Hướng dẫn này khám phá cách làm việc với các hàm PostgreSQL. Chúng ta cũng khám phá cú pháp và tham số của hàm và xem xét một số ví dụ thực tế.

Hàm Xếp hạng PostgreSQL ()

Sau đây là cú pháp của hàm rank() trong PostgreSQL:







RANK() QUÁ (PHẦN THAM GIA THEO partition_expression ĐẶT HÀNG THEO sort_expression [ASC|DESC])

Chúng ta bắt đầu bằng cách gọi hàm rank(). Sau đó, chúng tôi sử dụng từ khóa OVER để cho biết rằng chúng tôi muốn thực hiện thao tác chức năng cửa sổ.



Tiếp theo là PHẦN THAM GIA BẰNG biểu thức_phân vùng. Mệnh đề này chia các hàng thành các phân vùng khác nhau dựa trên một biểu thức đã cho. Xếp hạng được thực hiện độc lập trong từng phân vùng trong đó giá trị số nguyên xếp hạng bắt đầu từ 1 cho mỗi phân vùng mới.



Cuối cùng, chúng ta có mệnh đề ORDER BY chỉ định cột hoặc biểu thức xác định thứ tự hàng.





Ví dụ về hàm PostgreSQL Rank()

Truy vấn sau minh họa một ví dụ cơ bản về cách sử dụng hàm rank() của PostgreSQL:

CHỌN giá trị, RANK() QUÁ (ĐẶT HÀNG THEO giá trị) AS xếp hạng
TỪ (
GIÁ TRỊ (10), (20), (5), (15), (10)
) Dữ liệu AS(giá trị);

Trong ví dụ này, chúng tôi xếp hạng các giá trị dựa trên thứ tự tăng dần của chúng. Hai lần xuất hiện của giá trị được gán cùng thứ hạng vì chúng giống nhau và xuất hiện ở cùng một vị trí trong đơn hàng.



Bảng kết quả như sau:

CHỌN giá trị, RANK() QUÁ (PHẦN PHẦN THEO giá trị % 2 ĐẶT HÀNG THEO giá trị) AS xếp hạng
TỪ (
GIÁ TRỊ (10), (20), (5), (15), (10)
) Dữ liệu AS(giá trị);

Ví dụ về hàm PostgreSQL Rank() với Phân vùng theo mệnh đề

Hãy xem xét ví dụ sau:

CHỌN giá trị, RANK() QUÁ (PHẦN PHẦN THEO giá trị % 2 ĐẶT HÀNG THEO giá trị) AS xếp hạng
TỪ (
GIÁ TRỊ (10), (20), (5), (15), (10)
) Dữ liệu AS(giá trị);

Trong ví dụ này, chúng tôi đã thêm mệnh đề PARTITION BY với một biểu thức kiểm tra xem giá trị là số chẵn hay số lẻ. Điều này sẽ nhóm các giá trị thành hai phân vùng một cách hiệu quả: một cho các số chẵn (trong đó phần còn lại là 0) và phần còn lại cho các số lẻ (trong đó phần còn lại là 1).

Bộ kết quả như sau:

Ví dụ về hàm PostgreSQL Rank() bằng cách kết hợp nhiều tính năng SQL

Bạn cũng có thể tạo các truy vấn phức tạp hơn bằng hàm rank(). Ví dụ, lấy cơ sở dữ liệu Pagila. Giả sử chúng ta muốn lấy năm khách hàng hàng đầu dựa trên tổng số tiền thuê nhà của họ và xếp hạng cho họ.

Chúng ta có thể sử dụng hàm rank() như trong truy vấn sau:

CHỌN customer_id, first_name, last_name, total_payments,
RANK() TRÊN (ĐẶT HÀNG BẰNG total_payments DESC) AS xếp hạng
TỪ (
CHỌN c.customer_id, c.first_name, c.last_name, SUM(p.amount) NHƯ tổng_thanh toán
TỪ khách hàng c
THAM GIA thanh toán p BẬT c.customer_id = p.customer_id
NHÓM THEO c.customer_id, c.first_name, c.last_name
) NHƯ khách hàng_thanh toán
ĐẶT HÀNG THEO thứ hạng
GIỚI HẠN 10;

Trong ví dụ này, chúng tôi chọn customer_id, first_name, last_name, total_payment và thứ hạng được chỉ định(). Sau đó, chúng tôi sử dụng hàm rank() để chỉ định thứ hạng cho từng khách hàng dựa trên tổng_thanh toán được sắp xếp theo thứ tự giảm dần.

Truy vấn con bên trong cho phép chúng tôi tính toán tổng số tiền thanh toán cho mỗi khách hàng bằng cách nối bảng khách hàng và bảng thanh toán. Sau đó, chúng tôi nhóm kết quả dựa trên các cột customer_id, first_name và last_name để tìm nạp tổng số tiền thanh toán cho từng khách hàng.

Cuối cùng, trong truy vấn bên ngoài, chúng tôi áp dụng hàm rank() trên tập kết quả và sắp xếp nó theo total_payments theo thứ tự tăng dần. Chúng tôi cũng bao gồm mệnh đề giới hạn để chỉ tìm nạp 10 hàng trên cùng.

Như bạn có thể thấy, bạn có thể tạo dữ liệu sâu sắc hơn bằng cách kết hợp nhiều tính năng SQL như sắp xếp, lọc, tổng hợp, nối, v.v.

Phần kết luận

Chúng tôi đã khám phá cách chúng tôi có thể làm việc với hàm rank() trong PostgreSQL để tìm nạp thứ hạng của một hàng nhất định từ một tập hợp kết quả dựa trên các điều kiện đã xác định. Chúng tôi cũng đề cập đến cách kết hợp hàm rank() với các công cụ SQL khác để tạo các truy vấn phức tạp hơn.