gpt4 book ai didi

MySQL:达到某个值后开始分组

转载 作者:行者123 更新时间:2023-11-29 12:17:30 25 4
gpt4 key购买 nike

我正在尝试按“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com