我正在试图弄清楚如何按距离从一个值开始排序,优先级大于或小于。通过简单的查询可能无法实现,但我想我还是会询问。假设我有一个名为“得分”的表:
Score
-----
24
27
23
29
我想找到25分的最接近的值,在低于25之前返回最接近25的值。
尝试以下查询将返回24, 23, 27, 29
:
SELECT score FROM scores ORDER BY ABS(score - 25);
是否有一种直接的说法首先将最接近的分数返回到25以上,如果没有找到,则向下看?
我确信子查询是可能的,但是我的实际查询要复杂得多,有多个连接和其他标准,所以我担心使用联合或子查询的开销(以及查询的可读性) )。想要找到最简单的方法来实现这一点。
修改
我想确保在使用25以下的任何东西之前我已经找到所有分数都超过25。
答案 0 :(得分:2)
试试这个:
SELECT score
FROM scores
ORDER BY CASE WHEN score > 25 THEN 0 ELSE 1 END ASC,
ABS(score - 25);
结果如下:
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);