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

ActiveRecordクエリの時間ベースの優先度

    他のいくつかのデータベース(Oracleなど)とは異なり、PostgreSQLには完全に機能するbooleanがあります。 タイプ。 直接使用できます ORDER BYCASEを適用しない句 ステートメント-これらは、より複雑な状況に最適です。

    booleanの並べ替え順序 値は次のとおりです:

    FALSE -> TRUE -> NULL
    

    ORDER BY bool_expressionの場合 DESC 、順序を次のように逆にします:

    NULL -> TRUE -> FALSE
    

    TRUEが必要な場合 最初とNULL 最後に、 NULLS LASTを使用します ORDER BYの句 :

    ORDER BY (featured AND created_at > now() - interval '11 days') DESC NULLS LAST  
           , created_at DESC
    

    もちろん、NULLS LAST featuredの場合にのみ関連します またはcreated_at できます NULLである 。列が定義されている場合NOT NULL 、それなら気にしないでください。

    また、FALSE NULLの前に並べ替えられます 。これら2つを区別したくない場合は、CASEに戻ります。 ステートメント、またはNULLIF()をスローできます またはCOALESCE()

    ORDER BY NULLIF(featured AND created_at > now() - interval '11 days'), FALSE)
                                                                    DESC NULLS LAST
           , created_at DESC
    

    パフォーマンス

    使用方法に注意してください:

    created_at > now() - interval '11 days'
    

    しない

    now() - created_at < interval '11 days'
    

    最初の例では、右の式は1回計算される定数です。 。次に、インデックスを使用して、一致する行を検索できます。非常に効率的です。

    後者は通常、インデックスと一緒に使用することはできません。値は、右側の定数式と照合する前に、すべての行について計算する必要があります。あなたがそれを避けることができるならば、これをしないでください。これまで!



    1. SQL SELECT SUM

    2. SQL:カンマ区切りの文字列を解析し、結合として使用します

    3. PostgreSQL9.2.1とHibernateの接続

    4. PostgreSQL:シリアルvsアイデンティティ