MySQL CASE 不适用于使用两列的 ORDER BY

标签 mysql sql

我想使用以下 SQL:

SELECT * FROM Data WHERE tid=1 ORDER BY CASE WHEN round=0 THEN date ELSE round, date END ASC

但由于 round, date 位,它不起作用。如果我使那个位 round 工作正常,例如但不是两者兼而有之。

如果 round=0 那么我希望能够先对 round 进行升序排序,然后对 date 进行排序。这可能吗?

我想要实现的是一个排序的行数组,它首先按 round 排序,然后按 date 排序。但是,如果 round 为零,那么我只希望该行出现在该记录适合的日期之间,即使它的 round 值为零。

最佳答案

case expression 只返回一个值。如果你想首先使用 round = 0 的行,那么你可以这样做:

ORDER BY (CASE WHEN round = 0 THEN 1 ELSE 2 END),
         round, date

这可以缩短为:

ORDER BY (round = 0) DESC, round, date

但是,我不能 100% 确定这是您真正想要的。

如果 round 只采用两个值,那么您的问题会更有意义。在这种情况下,您确实希望首先按 date 排序:

ORDER BY date, round;

但是,这是对数据值的推测。

关于MySQL CASE 不适用于使用两列的 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49719830/

相关文章:

mysql - 无法对 phpmyadmin 数据库执行 JDBC 请求(未找到适合 jdbc 的驱动程序 :mysql://localhost:3306/ck)

php - 如何在php mysql查询中搜索where条件column_name ='bolt 1/2 inch'

php - 我的 PHP 脚本如何判断服务器是否繁忙?

mysql - 将查询 mysql 更新为 VB.net

sql - Varchar(Max) 在 Exec 中不起作用

c# - C# 是否有某种自己的客户端数据库实现

php - 按最新(最近)相关模型排序 [Laravel]

Mysql - 通过引用另一个数据集动态更改列名

mysql - 查询行作为列(MySQL)

mysql - 如何统计某天内的行数