你如何在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