在Postgres SQL中跨多个列的ORDER BY

时间:2017-11-06 08:27:38

标签: mysql postgresql sql-order-by

作为示例,让我们考虑Postgres SQL数据库中的以下表players

name            username*        score*
--------------------------------------
Jack Daniels    PerfectJack      100
-               JohnDoe          20
-               MadMike          500
Ben Tailor      Tailor3d         10

(* = required)

我想查询该表并输出以下(伪代码)

SELECT (ISSET name ? name : username, score) 
FROM players 
ORDER BY (ISSET name ? name : username)

应该导致

player         score
--------------------
Ben Tailor     10
Jack Daniels   100
JohnDoe        20
MadMike        500

为了澄清:让我们假设用户使用用户名注册的webapp。他也可以输入他的真名,但不是必须的。当显示播放器列表时,webapp应该能够输出真实姓名(如果已设置)并回退到用户名(如果未设置名称)并在这两列中进行排序(即,如果可用于订购,请使用真实姓名,否则使用用户名。)

如何使用Postgres SQL语句实现此行为?

2 个答案:

答案 0 :(得分:2)

可以使用COALESCE

完成此操作
SELECT 
    COALESCE(name, username) AS player, 
    score 
FROM 
    players 
ORDER BY 
    COALESCE(name, username);

另外,避免使用保留字 - 例如" name" - 在你的对象中。

答案 1 :(得分:1)

这应该可以解决问题:

SELECT case when name is not null then name else username end player, score
FROM players 
ORDER BY case when name is not null then name else username end