作为示例,让我们考虑 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
为了澄清:让我们假设一个网络应用程序,用户使用用户名注册。他也可以输入他的真实姓名,但不是必须的。当显示玩家列表时,网络应用程序应该能够输出真实姓名(如果设置)并回退到用户名(如果未设置姓名)并在这两列之间进行排序(即,如果可用于订购,则使用真实姓名,否则使用用户名)。
如何使用 Postgres SQL 语句实现此行为?
最佳答案
这可以使用 COALESCE 来完成:
SELECT
COALESCE(name, username) AS player,
score
FROM
players
ORDER BY
COALESCE(name, username);
此外,避免在您的对象中使用保留字 - 例如“名称”。
关于mysql - ORDER BY 跨 Postgresql 中的多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47132598/