NULL値をテーブルの最後にソートします


95

PostgreSQLNULLで、フィールドの値を持つ行を選択したテーブルの最後まで並べ替える方法はありますか?

お気に入り:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

回答:


171

まず、NULL値デフォルトの昇順で最後にソートされます。特別なことをする必要はありません。

この問題は降順に適用されます。これは完全な逆であるため、最初にNULL値をソートします。@Mostyが指摘溶液はで導入されたPostgreSQLの8.3

ORDER BY somevalue DESC NULLS LAST

以下のためのPostgreSQL 8.2とあなたは置き換えることができ、この標準のSQL機能のない古いまたは他のRDBMS:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEの前TRUEにソートされるため、上記の例のように、NULL値が最後になります。

関連する後の回答:


1
ほとんどの実際のアプリケーションでは、順序に関係なくnull値を持続させる必要があります。たとえば、オプションのタイムスタンプ、名、姓などでDESCを並べ替えると、数学的にDESCの順序がASCの反対であることが理にかなっているように見えても、本当に疑わしいと思います。たぶん、nullはそれ自体のカテゴリに含まれるだけであり、ASC、DESCの影響を受けず、常に最後に配置する必要があります。これがより適切なデフォルトでした。
ChristopheRoussy18年

インデックスがDESCの場合、インデックスに影響を与える可能性があります。それについてもメモを追加できますか?postgresql.org/message-id/...
クリストフRoussy

@ChristopheRoussy:ソート順に一致するインデックスは、上記のリンクされた回答で触れられています。
ErwinBrandstetter18年

2
個人的には、デフォルトは逆になっているはずだと思います。NULLは最初に昇順で、最後に降順です。NULLは「最小」値であるため、これははるかに直感的です。
スティーブン

1
MYSQLから来た人にとって、これは笑ですか?そもそもなぜこんな風に建てられたのか。やMySQLを超える結果を最適化でした
CodeGuru

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.