作为示例,让我们考虑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语句实现此行为?
答案 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