我的数据库中有两个表:
表A
Column_A1 column_A2
A1 10
A2 20
A3 30
表B
Column_B1 column_B2
B1 11
B2 21
B3 31
B4 29
B5 30.5
我想计算表B的多少行符合以下条件:
范围:
A1±1,
A2±1,
A3±1,
...
例如:
B1∈[A1-1,A1 + 1]
计算这些行,返回值1。
B2∈[A2-1,A2 + 1]
计算这些行,返回值1。
B3∈[A3-1,A3 + 1]
B4∈[A3-1,A3 + 1]
B5∈[A3-1,A3 + 1]
计算这些行,返回值3。
结果应该是这样的:
Column_A1 column_A2 num_match
A1 10 1
A2 20 1
A3 30 3
使用循环在其他编程语言中执行此操作很容易,但是在SQL中最简单的方法是什么?谢谢。
最佳答案
我将使用相关的子查询来做到这一点:
select a.*,
(select count(*)
from b
where b.column_b2 between a.column_a2 - 1 and a.column_a2 + 1
) as num_match
from a;
注意:使用
between
表示边界已包含在范围内。如果不是这样,则使用显式的<
和>
逻辑。许多数据库将能够利用此查询的
b(column_b2)
上的索引。您可以在MySQL上进行测试,看看是否是这种情况。关于mysql - SQL计算特定范围内的行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43257750/