如何将数字范围映射到 SQL 服务器或 Clickhouse 中的数字

How to map number ranges to numbers in SQL Server or Clickhouse

我的查询中有一个计算结果为浮点数。
我应该做的是将[x-0.005,x+0.005)的每个范围映射到x。
例如:

shown number lower bound upper bound
0.12 0.115 0.125
0.17 0.165 0.175
0.18 0.175 0.185

这些范围很大,所以 CASE/WHEN 行不通。那么,还有其他方法可以解决这个问题吗?

例如它会做的数据

Select lower_bound, upper_bound, (lower_bound + upper_bound)/2 shown_number
from mytable

解决方案:

SELECT FLOOR(N*200 -1)/200, N, CEILING(N * 200 + 1)/200
FROM   T 

试试这个:

WITH
    0.005 AS step,    
    (
        SELECT groupArray(ranges)
        FROM 
        (
            /* Emulate the Ranges-table. */
            SELECT arrayJoin([(0.115, 0.125), (0.165, 0.175), (0.175, 0.185)]) AS ranges
        )
    ) AS ranges
SELECT
    x,
    arrayFirst(range -> x >= range.1 - step AND x < range.2 + step, ranges) AS range
FROM 
(
    /* Emulate the test table. */
    SELECT arrayJoin([0.12, 0.17, 0.18, 0.99]) AS x
)

/*
┌────x─┬─range─────────┐
│ 0.12 │ (0.115,0.125) │
│ 0.17 │ (0.165,0.175) │
│ 0.18 │ (0.175,0.185) │
│ 0.99 │ (0,0)         │
└──────┴───────────────┘
*/

考虑到浮点数的比较近似