他のデータベース (Oracle など) とは異なり、PostgreSQL には完全に機能するbooleanタイプがあります。ステートメントを適用せずに句で直接使用できます。これらは、より複雑な状況に最適です。ORDER BYCASE
boolean値のソート順は次のとおりです。
FALSE -> TRUE -> NULL
場合はORDER BY bool_expressionDESC、次のように順序を逆にします。
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な場合にのみ関連します。列が定義されている場合は、気にしないでください。featuredcreated_at NULLNOT 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 回計算される定数です。次に、インデックスを使用して、一致する行を検索できます。非常に効率的です。
後者は通常、インデックスでは使用できません。右側の定数式に対して値をチェックする前に、すべての行に対して値を計算する必要があります。回避できる場合は、これを行わないでください。これまで!