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

标签 mysql group-by

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

相关文章:

php - 在第一个选择中进行选择后填充第二个选择然后在进行第二个选择后添加按钮?

php - Android + php + mysql 问题

python-3.x - 在 Python Pandas 中,将 cumsum 与 groupby 结合使用,并在值为 0 时重置 cumsum

python - 如何按 Pandas 中的值对系列进行分组?

mysql - 使用 `group by` 获得所需结果的正确方法是什么?

python - 我如何按值分组?

mysql - SQL多对多计数求和

mysql 查询结果与 join 的问题

mysql - 分组、计数和位置

mysql - PHPMyadmin导入CSV创建新表