私のテーブルには、f1、f2、f3の3つのブールフィールドがあります。私が行った場合
SELECT * FROM table ORDER BY f1, f2, f3
レコードは、これらのフィールドによってfalse、true、nullの順序で並べ替えられます。 trueとfalseの間にnullを付けて順序付けたい:正しい順序はtrue、null、falseである必要があります。
私はPostgreSQLを使用しています。
美しくはありませんが、機能するはずです:
... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc
より良い解決策は、を使用することです
f1 DESC NULLS LAST
true、false、nilの順序で問題がない場合(質問の重要な部分は、今の私の状況のように、真ではない値を一緒にすることだったと思います)
次のようにすることもできます。
order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...
f1
がTRUE
の場合、次のようになります。TRUE, TRUE
f1
がNULL
の場合、次のようになります:FALSE, TRUE
f1
がFALSE
の場合、次のようになります:FALSE, FALSE
これは、必要な並べ替え順序に対応しています。