Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách xếp hạng các hàng trong một phân vùng trong SQL

Vấn đề:

Trong tập kết quả, bạn muốn phân vùng các bản ghi và xếp hạng các hàng trong mỗi phân vùng, thêm một cột khác để hiển thị thứ hạng của các hàng trong phân vùng.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên là tạp chí với dữ liệu trong các cột sau:id (khóa chính), name , categoryprice .

id tên loại giá
105 Cuộc sống đồng quê lối sống 1,70
108 Tạp chí Tin tức tin tức 3,35
115 Decibel âm nhạc 6,50
123 Tạp chí Trống âm nhạc 6,50
145 Hoàng hôn lối sống 12,00
155 Thế giới lối sống 9,50
158 Bàn phím âm nhạc 8,45

Hãy nhóm tạp chí theo danh mục và xếp hạng từng nhóm theo thứ tự giảm dần theo giá . Hiển thị vị trí xếp hạng, tên, danh mục và giá cho mỗi tạp chí.

Giải pháp:

SELECT  
  category,
  name,
  price,
  RANK() OVER (PARTITION BY category
                    ORDER BY price DESC
                    ) AS price_rank
FROM magazine;

Đây là kết quả:

loại tên giá price_rank
lối sống Hoàng hôn 12,00 1
lối sống Thế giới 9,50 2
lối sống Cuộc sống đồng quê 1,70 3
âm nhạc Bàn phím 8,45 1
âm nhạc Decibel 6,50 2
âm nhạc Tạp chí Trống 6,50 2
tin tức Tạp chí Tin tức 3,35 1

Thảo luận:

Để phân vùng các hàng và xếp hạng chúng theo vị trí của chúng trong phân vùng, hãy sử dụng hàm RANK () với mệnh đề PARTITION BY.

Hàm RANK () của SQL cho phép chúng ta thêm vị trí của bản ghi trong tập kết quả hoặc trong mỗi phân vùng. Trong ví dụ của chúng tôi, chúng tôi xếp hạng các hàng trong một phân vùng.

Mệnh đề OVER () luôn đứng sau RANK (). OVER () phải chứa mệnh đề ORDER BY. Nếu bạn đang trả về thứ hạng trong một phân vùng, hãy đặt mệnh đề PARTITION BY bên trong mệnh đề OVER (). PARTITION BY được theo sau bởi một biểu thức hoặc tên cột; trong ví dụ của chúng tôi, chúng tôi sử dụng cột category (PARTITION BY category ).

Lưu ý: Nếu không sử dụng phân vùng, bạn có thể bỏ qua PARTITION BY và chỉ cần đặt mệnh đề ORDER BY trong OVER ().

Sau PARTITION BY, đặt ORDER BY theo sau là tên của các cột hoặc biểu thức sắp xếp. Trong ví dụ của chúng tôi, chúng tôi đang sắp xếp theo thứ tự giảm dần theo cột price (ORDER BY price DESC ). Từ khóa DESC cho biết thứ tự sắp xếp giảm dần.

Trong ví dụ trên, việc sử dụng RANK () với PARTITION BY đã chia kết quả được đặt thành các nhóm tạp chí riêng biệt theo danh mục của chúng . Với mỗi nhóm, các hàng được sắp xếp theo giá và sau đó được xếp hạng trong nhóm đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mô hình dữ liệu bữa tiệc dành cho trẻ em

  2. Làm thế nào để thực hiện câu lệnh IF trong SQL?

  3. Khám phá mức độ ảnh hưởng đến hiệu suất

  4. Trận đấu gần nhất, Phần 1

  5. Cách tính hình vuông trong SQL