他のいくつかのデータベース(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回計算される定数です。 。次に、インデックスを使用して、一致する行を検索できます。非常に効率的です。
後者は通常、インデックスと一緒に使用することはできません。値は、右側の定数式と照合する前に、すべての行について計算する必要があります。あなたがそれを避けることができるならば、これをしないでください。これまで!