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

时间:2013-11-26 23:05:34

标签: mysql sql

我正在试图弄清楚如何按距离从一个值开始排序,优先级大于或小于。通过简单的查询可能无法实现,但我想我还是会询问。假设我有一个名为“得分”的表:

Score
-----
24
27
23
29

我想找到25分的最接近的值,在低于25之前返回最接近25的值。

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

SELECT score FROM scores ORDER BY ABS(score - 25);

是否有一种直接的说法首先将最接近的分数返回到25以上,如果没有找到,则向下看

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

修改

我想确保在使用25以下的任何东西之前我已经找到所有分数都超过25。

2 个答案:

答案 0 :(得分:2)

试试这个:

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

sqlfiddle demo

结果如下:

SCORE
27
29
24
23

答案 1 :(得分:1)

试试:

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