MySQL-按值的距离排序,优先考虑更高的值

MySQL-按值的距离排序,优先考虑更高的值,mysql,sql,Mysql,Sql,我试图找出如何按距离值排序,优先考虑大于或小于。用一个简单的查询可能是不可能的,但我想我还是要查询一下。假设我有一个名为“分数”的表: 我想找到最接近25分的值,返回25分以上的最接近值,然后再查找25分以下的值 尝试以下查询将返回24、23、27、29: SELECT score FROM scores ORDER BY ABS(score - 25); 有没有一种简单的方法可以说首先返回最接近的25分以上的分数,如果没有找到,请向下看 我确信子查询是可能的,但是我的实际查询要复杂得多,有多

我试图找出如何按距离值排序,优先考虑大于或小于。用一个简单的查询可能是不可能的,但我想我还是要查询一下。假设我有一个名为“分数”的表:

我想找到最接近25分的值,返回25分以上的最接近值,然后再查找25分以下的值

尝试以下查询将返回
24、23、27、29

SELECT score FROM scores ORDER BY ABS(score - 25);
有没有一种简单的方法可以说首先返回最接近的25分以上的分数,如果没有找到,请向下看

我确信子查询是可能的,但是我的实际查询要复杂得多,有多个连接和其他条件,所以我担心使用联合或子查询的开销(以及查询的可读性)。如果可能的话,我想找到实现这一点的最简单方法

编辑:

我想确保在选择低于25分的分数之前,我已经找到了所有高于25分的分数。

尝试以下方法:

SELECT score 
FROM scores 
ORDER BY CASE WHEN score > 25 THEN 0 ELSE 1 END ASC,
  ABS(score - 25);

结果如下:

SCORE
27
29
24
23
试用:

SELECT score
FROM scores
order by (case when score > 25 then 0 else 1 end case), ABS(score - 25);

你必须提供更多关于逻辑的信息。分数高2比分数低1好吗?还是高3比低1好?等等。换句话说,结果集应该显示什么样的评分模式?@Jim。。请参阅编辑。。。我想确保在使用25分以下的任何分数之前,我已经找到了所有高于25分的分数。因此,在分数为24分之前,例如300分应该出现?是的。下面的答案非常有帮助。回答得很好,非常有用clean@Filipe,漂亮。非常感谢。当然可以祝你好运
SELECT score
FROM scores
order by (case when score > 25 then 0 else 1 end case), ABS(score - 25);