2013-11-26 34 views
1

我試圖弄清楚如何通過距離某個值的距離來排序,優先級大於或小於。用簡單的查詢可能無法實現,但我想我會詢問。說我有一個表命名爲「分數」:MySQL - 按距離排序的值優先給予更高的值

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

你將不得不提供關於邏輯的詳細信息。分數是否比低於1的分數高2分?或者更高3比更低1?換句話說,結果集應該顯示什麼樣的評分模式? –

+0

@Jim ..查看編輯...我想確保我找到的所有分數高於25,然後求助於低於25的任何值。 – Mike

+0

因此, 300分應該在24分之前出現? – Interrobang

回答

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 
+0

不錯的答案,很乾淨 –

+0

@菲利普,漂亮。謝謝! – Mike

1

試用:

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

謝謝瑞恩。 – Mike

+0

當然可以。祝你好運! –