我想使用以下 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/