我有一个有不同3-3-4
的桶,我需要为这个号码找到合适的桶
1-3 4-6 7-10 11-13 14-16 17-20 21 - 23 24 - 26 27 - 30
找到正确的桶的有效公式是什么,就像第5号是在桶4-6
中,18个是在桶17-20
中。
需要为此编写sql查询。
发布于 2022-06-20 06:28:25
我会保持一个单独的真正的表格,包含范围值。然后,加入到它以获得您想要的输出。
Table: ranges
start | end
1 | 3
4 | 6
7 | 10
11 | 13
14 | 16
17 | 20
21 | 23
24 | 26
27 | 30
WITH buckets AS (
SELECT 5 AS val UNION ALL
SELECT 18
)
SELECT b.val, CAST(r.start AS VARCHAR(10)) + '-' + CAST(r.end AS VARCHAR(10))
FROM buckets b
INNER JOIN ranges r
ON b.val BETWEEN r.start AND r.end
ORDER BY b.val;
发布于 2022-08-21 17:44:28
对于不重叠的范围,您只需要每个范围的起始值(或者,等效地说,是结束)。然后索引那一列。这是非常有效的:
SELECT ...
FROM ...
WHERE n >= ?
ORDER BY n
LIMIT 1
由于索引,这在O(1)中运行。(如果包括BTree查找的成本,则为O(BTree))。
更多细节(以IP地址表示):http://mysql.rjweb.org/doc.php/ipranges
https://stackoverflow.com/questions/72682967
复制相似问题