【问题标题】:ORDER BY distance to another valueORDER BY 到另一个值的距离
【发布时间】:2013-11-23 17:57:45
【问题描述】:

假设我们有一张这样的桌子

id|value
--------
1 | 50
2 | 19
3 | 100
4 | 21
5 | -10

如何使用ORDER BY 运算符按值与另一个值的距离对值进行排序?

SELECT * FROM table ORDER BY nearest(value,30) DESC

获取此表:

id|value
--------
4 | 21
1 | 50
2 | 19
5 | -10
3 | 100

【问题讨论】:

    标签: sql sql-server tsql sql-order-by distance


    【解决方案1】:

    你可以使用:

    SELECT * FROM table ORDER BY abs(value - 30) ASC
    

    【讨论】:

    • 将其修复为 SLECT * FROM table ORDER BY abs(value - 30) ASC,我会接受)
    • 完成。抱歉,我只是在查看您的代码,而不是在示例中。 :)
    【解决方案2】:

    不确定所有 sql 方言都接受 Paul92 的回答。

    这是另一个解决方案:

    SELECT * 
    FROM (
       SELECT 
          t.*, 
          abs(value - 30) AS abs_value
       FROM table t 
    ) temp
    ORDER BY abs_value 
    

    【讨论】:

    • 这看起来不错,但较短的那个在 mySql 上对我有用
    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2013-04-09
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多