web-dev-qa-db-ja.com

ブール列をtrue、null、falseとしてソートするためのSQL

私のテーブルには、f1、f2、f3の3つのブールフィールドがあります。私が行った場合

SELECT * FROM table ORDER BY f1, f2, f3

レコードは、これらのフィールドによってfalse、true、nullの順序で並べ替えられます。 trueとfalseの間にnullを付けて順序付けたい:正しい順序はtrue、null、falseである必要があります。

私はPostgreSQLを使用しています。

20
petehern

美しくはありませんが、機能するはずです:

   ... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc
27
meriton

より良い解決策は、を使用することです

f1 DESC NULLS LAST

true、false、nilの順序で問題がない場合(質問の重要な部分は、今の私の状況のように、真ではない値を一緒にすることだったと思います)

https://stackoverflow.com/a/7621232/1627888

25
Yo Ludke

次のようにすることもできます。

order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...

f1TRUEの場合、次のようになります。TRUE, TRUE
f1NULLの場合、次のようになります:FALSE, TRUE
f1FALSEの場合、次のようになります:FALSE, FALSE

これは、必要な並べ替え順序に対応しています。

3
jc david