假设我有这张桌子
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中做到这一点)
答案 0 :(得分:3)
一个选项使用联接,然后进行聚合:
client.on('message', msg => {
if (msg.content === `"Your message!"`) {
msg.channel.type === (`"dm"`) + msg.author.sendMessage(`"Your other message"`)
}
}
请注意,我们需要同时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
会与自我联接中的多个其他记录匹配。