PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL:क्रमिक रैंक प्राप्त करना (पंक्ति सूचकांक? ) कुशलता से

@OMG_Ponies ने पहले ही इसकी ओर इशारा कर दिया था:<मजबूत>विंडो फ़ंक्शन dense_rank() आपको जो चाहिए वह है - या शायद rank() . UPDATE इस तरह दिख सकता है:

टेस्ट केस:

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.

अद्यतन विवरण:

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

आपको PostgreSQL 8.4 या बाद के संस्करण की आवश्यकता है विंडो फ़ंक्शंस के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubuntu पर pgAdmin का उपयोग करके Postgres को लोकलहोस्ट सर्वर से कैसे कनेक्ट करें?

  2. पोस्टग्रेज में गो और आईएन क्लॉज

  3. Django - संबंध संबंध मौजूद नहीं है। python manage.py माइग्रेट नहीं चला सकता?

  4. पीजी कॉलम को न्यूलेबल ट्रू में कैसे बदलें?

  5. पोस्टग्रेज - jsonb ऐरे से एलिमेंट हटाएं