你如何在postgres中按多个字段有条件地排序
How do you conditionally order by multiple fields in postgres
我的具体用例是我想按名称对用户列表进行排序;名字,姓氏。用户有一个首选名称和一个合法名称。我想按首选名称(如果存在)进行排序,但法定名称作为备用名称。
例如,给出以下 table:
id | first_name | last_name | preferred_first_name | preferred_last_name
----+------------+-----------+----------------------+---------------------
9 | Ryan | Bently | Alan |
10 | Ryan | Do | Billy | Baxter
11 | Olga | Clancierz | |
12 | Anurag | Plaxty | | Henderson
13 | Sander | Cliff | Billy |
我想这样排序:
Alan Bently
Anurag Henderson
Billy Baxter
Billy Cliff
Olga Clancierz
通常,只有一组名称字段我会这样做:
SELECT * from users ORDER BY users.first_name, users.last_name
存在时按首选名称字段排序,但不存在时又回退到其他名称字段的最佳方式是什么?
尝试
ORDER BY COALESCE(users.preferred_first_name,users.first_name), users.last_name
我的具体用例是我想按名称对用户列表进行排序;名字,姓氏。用户有一个首选名称和一个合法名称。我想按首选名称(如果存在)进行排序,但法定名称作为备用名称。
例如,给出以下 table:
id | first_name | last_name | preferred_first_name | preferred_last_name
----+------------+-----------+----------------------+---------------------
9 | Ryan | Bently | Alan |
10 | Ryan | Do | Billy | Baxter
11 | Olga | Clancierz | |
12 | Anurag | Plaxty | | Henderson
13 | Sander | Cliff | Billy |
我想这样排序:
Alan Bently
Anurag Henderson
Billy Baxter
Billy Cliff
Olga Clancierz
通常,只有一组名称字段我会这样做:
SELECT * from users ORDER BY users.first_name, users.last_name
存在时按首选名称字段排序,但不存在时又回退到其他名称字段的最佳方式是什么?
尝试
ORDER BY COALESCE(users.preferred_first_name,users.first_name), users.last_name