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ステートメント:

    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
    

    PostgreSQL8.4以降が必要です ウィンドウ関数用。




    1. 単語リストのいずれかに対するPostgreSQLワイルドカードLIKE

    2. PHPのmySQLテーブルからドロップダウンボックスにデータを入力します

    3. 一重引用符で囲まれたデータを含むcsvファイルからpostgreSQLデータをロードするための正しいCOPYコマンド?

    4. 2つのテーブルをマージして、テーブル2から最後の新しい行を取得し、残りをテーブル1から取得する方法