使用 BETWEEN 创建独占的间隔集
Using BETWEEN to create exclusive set of intervals
我有一个包含 id 和 distance 列的数据库。我需要计算一定距离之间的 ID 数量。
比如我想统计距离在1km到2km之间有多少个id,所以我用的是这个代码:
SELECT COUNT (distance)
FROM table
WHERE distance BETWEEN 1000 AND 2000
-- Returns a COUNT of 240,600
当我想计算 2km 和 3km 之间的 ID 数量时,我使用了相同的查询,但是“2km”值在两个查询中都被计算在内,因为包含 BETWEEN 运算符。
SELECT COUNT (distance)
FROM table
WHERE distance BETWEEN 2000 AND 3000
-- Returns a COUNT of 353,440
据我了解,上面的两个查询都将包含距离恰好为 2000 的行。
我很想知道是否有另一种方法来计算距离之类的东西(并且有很多行)或者我是否需要 GROUP BY 然后计数?
你可以试试这种方法来得到直方图table
SELECT DIV(distance, 1000) * 1000 distance_from,
(DIV(distance, 1000) * 1000) + 999 distance_to,
COUNT(*) num
FROM mytable
GROUP BY DIV(distance, 1000) * 1000
当您将表达式 DIV(distance, 1000)
与 GROUP BY
一起使用时,它会创建距离值组。
如您所见,BETWEEN
在处理数字范围方面的作用有限。您可能需要 distance >= 1000 AND distance < 2000
范围 [1000, 2000]。
根据 SQL 规范,这个表达式:
WHERE distance BETWEEN 1000 AND 2000
等同于:
WHERE distance >= 1000 AND distance <= 2000
据我了解,您需要从端点之一中删除 =
以创建互斥范围。根据您对 1km 和 2km 之间的定义,应使用以下一组条件之一:
WHERE distance >= 0 AND distance < 1000
WHERE distance >= 1000 AND distance < 2000
WHERE distance >= 2000 AND distance < 3000
或
WHERE distance <= 1000
WHERE distance > 1000 AND distance <= 2000
WHERE distance > 2000 AND distance <= 3000
我有一个包含 id 和 distance 列的数据库。我需要计算一定距离之间的 ID 数量。
比如我想统计距离在1km到2km之间有多少个id,所以我用的是这个代码:
SELECT COUNT (distance)
FROM table
WHERE distance BETWEEN 1000 AND 2000
-- Returns a COUNT of 240,600
当我想计算 2km 和 3km 之间的 ID 数量时,我使用了相同的查询,但是“2km”值在两个查询中都被计算在内,因为包含 BETWEEN 运算符。
SELECT COUNT (distance)
FROM table
WHERE distance BETWEEN 2000 AND 3000
-- Returns a COUNT of 353,440
据我了解,上面的两个查询都将包含距离恰好为 2000 的行。
我很想知道是否有另一种方法来计算距离之类的东西(并且有很多行)或者我是否需要 GROUP BY 然后计数?
你可以试试这种方法来得到直方图table
SELECT DIV(distance, 1000) * 1000 distance_from,
(DIV(distance, 1000) * 1000) + 999 distance_to,
COUNT(*) num
FROM mytable
GROUP BY DIV(distance, 1000) * 1000
当您将表达式 DIV(distance, 1000)
与 GROUP BY
一起使用时,它会创建距离值组。
如您所见,BETWEEN
在处理数字范围方面的作用有限。您可能需要 distance >= 1000 AND distance < 2000
范围 [1000, 2000]。
根据 SQL 规范,这个表达式:
WHERE distance BETWEEN 1000 AND 2000
等同于:
WHERE distance >= 1000 AND distance <= 2000
据我了解,您需要从端点之一中删除 =
以创建互斥范围。根据您对 1km 和 2km 之间的定义,应使用以下一组条件之一:
WHERE distance >= 0 AND distance < 1000
WHERE distance >= 1000 AND distance < 2000
WHERE distance >= 2000 AND distance < 3000
或
WHERE distance <= 1000
WHERE distance > 1000 AND distance <= 2000
WHERE distance > 2000 AND distance <= 3000