我正在尝试按“new_treads”列对“response”首先等于 1 的值进行分组。
id |treads |response
------------------
1 | 1 | 0
2 | 1 | 1
3 | 2 | 0
4 | 2 | 0
5 | 2 | 1
6 | 2 | 1
7 | 2 | 1
... | ... | ...
15 | 9 | 0
16 | 9 | 1
17 | 9 | 0
18 | 9 | 1
19 | 10 | 0
目前我可以使用:
SELECT
thread,
count(response),
sum(response)
FROM messages
GROUP BY thread
获取:
treads |count(response) | sum(response)
------------------------------------------
1 | 2 | 1
2 | 5 | 3
9 | 4 | 2
10 | 1 | 0
但我想做的是开始分组,或计数(响应),其中“响应”= 1。给予:
treads |count(response) | sum(response)
------------------------------------------
1 | 1 | 1
2 | 3 | 3
9 | 3 | 2
10 | 0 | 0
谢谢!
最佳答案
抱歉,这很困惑。
select treads, if(sum(response) >= 1, count(response), 0) count, sum(response) sum
from messages
where id not in (
select m.id
from messages m
where id <
(select min(id) id
from messages
where response = 1
and treads = m.treads
group by treads)
)
group by treads;
在这里摆弄:http://sqlfiddle.com/#!9/fffd0/14
作为解释,第一个子查询获取所有消息 id,其中 id 小于该线程的第一行 id,其中 response = 1
- 该值来自最里面的子查询,并且这为我们提供了一个排除列表来过滤掉最外层查询的结果。
我们在 count
中使用 if
语句来处理胎面的唯一记录具有 response = 0
的情况,就像您希望它包含在结果中,但不计算在内。
关于MySQL:达到某个值后开始分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29550965/