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

1つのgroup-byからのSQL2つの基準

    これは根本的に簡単になります :

    SELECT DISTINCT ON (b, c, e, f)
           b, c, e, f, id   -- add more columns freely
    FROM   (<duplicate query here>) sub
    ORDER  BY b, c, e, f, (a IS NOT NULL), id
    
    • 重複するクエリにはすべての列があります。 JOINする必要はありません 再びベーステーブルに移動します。

    • 標準SQLのPostgres拡張機能を使用するDISTINCT DISTINCT ON

    • Postgresには適切なブール型があります。 ORDER BYできます ブール式を直接。シーケンスはFALSE (0)、TRUE (1)、NULL (ヌル)。 aがNULLの場合、この式はFALSEです。 最初に並べ替えます:(a IS NOT NULL) 。残りはidで並べ替えられます 。 Voilá。

    • IDの選択 自動的に発生します。説明によると、このクエリで選択された行のIDが必要です。これ以上することはありません。

    • おそらく、これを重複クエリに直接統合できます。




    1. PHP float/doubleがMySQLDECIMALとして保存されます

    2. SQLインジェクション保護-一重引用符

    3. タイムスタンプを使用した日別のMySQLグループの結果

    4. MySQLのパフォーマンス:長いクエリの識別