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

PostgreSQL:nhận xếp hạng thứ tự (chỉ mục hàng?) Một cách hiệu quả

@OMG_Ponies đã chỉ ra điều đó: hàm cửa sổ dense_rank() là những gì bạn cần - hoặc có thể là rank() . UPDATE có thể trông như thế này:

Trường hợp thử nghiệm:

CREATE TEMP TABLE tbl (
   id int
 , dollars int
 , dollars_rank int
 , points int
 , points_rank int
 );
INSERT INTO tbl VALUES
 (1, 20, 1, 35, 1)
,(2, 18, 2, 30, 3)
,(3, 10, 3, 33, 2)
,(4, 10, 3, 33, 2);  -- I put a dupe row in to demonstrate ties.

CẬP NHẬT tuyên bố:

UPDATE tbl
SET    dollars_rank = r.d_rnk
     , points_rank  = r.p_rnk
FROM (
    SELECT id
         , dense_rank() OVER (ORDER BY dollars DESC) AS d_rnk
         , dense_rank() OVER (ORDER BY points DESC)  AS p_rnk
    FROM   tbl
    ) r
WHERE tbl.id = r.id

Bạn cần PostgreSQL 8.4 trở lên cho các chức năng cửa sổ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên quy trình PostgreSQL trên Solaris

  2. ActiveRecord:Làm thế nào để tìm cha mẹ có TẤT CẢ con cái phù hợp với một điều kiện?

  3. Django không thể tải đồ đạc thử nghiệm, IntegrityError

  4. Cloud9 postgres

  5. Một tình huống trong đó ActiveRecord và SQL không trả lại kết quả giống nhau do OID không xác định được coi là Chuỗi