sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLMAXおよびGROUPBY

    最短の(そしておそらく最速の)クエリは、 DISTINCT ON 、SQL標準のPostgreSQL拡張機能DISTINCT 条項:

    SELECT DISTINCT ON (1)
           id, count, year
    FROM   tbl
    ORDER  BY 1, 2 DESC, 3;
    

    番号は、SELECTの順序位置を示しています リスト。わかりやすくするために列名を詳しく説明できます:

    SELECT DISTINCT ON (id)
           id, count, year
    FROM   tbl
    ORDER  BY id, count DESC, year;
    

    結果はidの順に並べられます 歓迎される場合とされない場合があるなど。いずれにせよ、「未定義」よりはましです。

    また、明確に定義された方法で(複数の年が同じ最大数を共有する場合)関係を断ち切ります。最も早い年を選択します。気にしない場合は、yearを削除してください ORDER BYから 。または、year DESCで最新の年を選択してください 。

    多くの場合 idあたりの行数 、他のクエリ手法は(はるかに)高速です。参照:



    1. MariaDBでのDATE_SUB()のしくみ

    2. MySQLINSERTINTOテーブルの値..vsINSERTINTOテーブルSET

    3. mysqlデータベースの外部キー値を更新する方法

    4. V $ SQL_SHARED_CURSOR TOP_LEVEL_RPI_CURSOR