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