获取具有值范围MySQL内的行的计数

时间:2018-07-14 23:50:44

标签: mysql

假设我有这张桌子

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中做到这一点)

1 个答案:

答案 0 :(得分:3)

一个选项使用联接,然后进行聚合:

client.on('message', msg => {    
  if (msg.content === `"Your message!"`) {      
    msg.channel.type === (`"dm"`) + msg.author.sendMessage(`"Your other message"`) 
  }
}

enter image description here

Demo

请注意,我们需要同时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。这样做的原因是我们希望按原始表中的每个记录进行逻辑汇总,该表由valueid列的组合表示。如果我们仅按value进行分组,那么我们将得到不正确的计数,因为例如值value会与自我联接中的多个其他记录匹配。