PostgreSQL の特殊なケースを使用した値の並べ替え
この説明は、「タスク」という名前の PostgreSQL テーブルからのデータの配置を中心に説明します。各タスクには「並べ替え」と呼ばれるオプションのフィールドがあります。目標は、「sort」値を持たない並べ替えタスクを他のすべての後に優先させることです。ただし、並べ替え値として「-1」を持つタスクは例外で、他のすべての後に表示される必要があります。
次のサンプル データを考えてみましょう。
id | f_id | name | sort |
---|---|---|---|
1 | 1 | zeta | -1 |
2 | 1 | alpha | 1 |
3 | 1 | gamma | 3 |
4 | 1 | beta | 2 |
5 | 1 | delta | |
6 | 1 | epsilon |
COALESCE(sort,99999) を単独で使用すると、null 値は非 null 値の後にグループ化されますが、次のような特殊なケースには対処できません。 "-1."
このソリューションでは、PostgreSQL のブール データ型を使用して、目的の並べ替え順序を実現します。
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
このクエリは、比較 "(sort IS NOT DISTINCT) という事実を利用しています。 FROM -1)" は、"-1" を除くすべての値に対して FALSE と評価され、"-1" 自体は TRUE と評価されます。最初にこの式でソートすると、ソート値に関係なく、「-1」値が順序の最後に配置されます。
DESC キーワードを使用する別のアプローチも示されています。
SELECT * FROM tasks ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
どちらのメソッドも、「sort」値を使用せずにタスクを他のすべての後に効果的に並べ替えますが、「-1」値が他のすべての非 null 並べ替え値の後に表示されるようにします。
以上がNull と特殊なケース (-1) 値を含む PostgreSQL データを並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。