你如何通过postgres中的多个字段有条件地订购

时间:2015-09-29 18:04:04

标签: sql postgresql sql-order-by

我的具体用例是我想按名称对用户列表进行排序;名字,姓氏。用户具有首选名称和合法名称。我希望按首选名称排序,如果它存在,但合法名称为后退。

例如,如下表所示:

 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

出现时按首选名称字段排序的最佳方式是什么,但当它们不存在时会回退到其他名称字段?

1 个答案:

答案 0 :(得分:2)

尝试

ORDER BY COALESCE(users.preferred_first_name,users.first_name), users.last_name