我的数据库中有两个表:

表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/

10-08 21:53