PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:sprawne uzyskiwanie rangi porządkowej (indeks wiersza? )

@OMG_Ponies już na to zwróciło:funkcja okna dense_rank() jest tym, czego potrzebujesz - a może rank() . UPDATE może wyglądać tak:

Przypadek testowy:

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.

Oświadczenie UPDATE:

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

Potrzebujesz PostgreSQL 8.4 lub nowszego dla funkcji okna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zadeklarować zmienną w PostgreSQL

  2. Komunikat 28000:brak wpisu pg_hba.conf dla hosta \xx.xxx.xxx.xxxx\, użytkownik \User, baza danych \databasename\, SSL wyłączony

  3. Wyszukiwanie tekstu Django z aktualizacją częściowego dopasowania zdań do django3

  4. Różnica między set, \set i \pset w psql

  5. Posortować według kolumny ASC, ale najpierw wartości NULL?