mysql - ORDER BY 跨 Postgresql 中的多个列

标签 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

为了澄清:让我们假设一个网络应用程序,用户使用用户名注册。他也可以输入他的真实姓名,但不是必须的。当显示玩家列表时,网络应用程序应该能够输出真实姓名(如果设置)并回退到用户名(如果未设置姓名)并在这两列之间进行排序(即,如果可用于订购,则使用真实姓名,否则使用用户名)。

如何使用 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/

相关文章:

php - 按欧洲日期订购

mysql - 按索引使用排序

mysql - 将两个 sql 查询合并为一个

mysql - 选择总和(金额)作为总计条件

Mysql 使用连接表选择每个轨道的多个艺术家记录

datetime - 如何设置像 'YYYYMM' 这样的 Postgresql 默认值日期戳?

java - JPA - 将对象级联保存到由 id 映射的数据库

sql - 具有 NULL 值的 NOT LIKE 行为

mysql - 同时使用 ASC 和 DESC 进行排序

mysql - 按 MySQL 中最新发布日期排序