他のいくつかのデータベース(Oracleなど)とは異なり、PostgreSQLには完全に機能するboolean
があります。 タイプ。 直接使用できます ORDER BY
で CASE
を適用しない句 ステートメント-これらは、より複雑な状況に最適です。
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回計算される定数です。 。次に、インデックスを使用して、一致する行を検索できます。非常に効率的です。
後者は通常、インデックスと一緒に使用することはできません。値は、右側の定数式と照合する前に、すべての行について計算する必要があります。あなたがそれを避けることができるならば、これをしないでください。これまで!