获取值在值范围内的行数

rsl1atfo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(263)

我应该有这张table吗

id |  value
----------
1  |  1
2  |  1
3  |  2
4  |  4
5  |  7
6  |  10
7  |  12
8  |  13

我想知道如何得到这样一个结果,即每行都有一个附加值,即值在该行值的1个单位内的行数。话虽如此,答案应该是这样的

id |  value | count
--------------
1  |  1     |  3
2  |  1     |  3
3  |  2     |  3
4  |  4     |  1
5  |  7     |  1
6  |  10    |  1
7  |  12    |  2
8  |  13    |  2

我的描述可能令人困惑,但这是我能想到的最好的解释。我花了几个小时试图找到一种方法来进行这种合并,但我还是被卡住了。
我希望有人能告诉我,我能做些什么,使这在mysql中发生(这个问题是一个简单的编程数组问题的转换,但我无法在mysql中做到这一点)

enyaitl3

enyaitl31#

一个选项使用联接,后跟聚合:

SELECT
    t1.id,
    t1.value,
    COUNT(*) AS cnt
FROM yourTable t1
LEFT JOIN yourTable t2
    ON ABS(t1.value - t2.value) <= 1
GROUP BY
    t1.value, t1.id;

演示

请注意,我们需要 GROUP BY 两个 id 以及 value . 原因是我们希望按原始表中的每条记录进行逻辑聚合,这由 id 以及 value 柱。如果我们只按 value ,则会得到不正确的计数,因为 1 将与自联接中的多个其他记录匹配。

相关问题