use*_*000 8 mysql if-statement group-by
if in group by子句有没有办法?
我有一个查询,我想根据列的值对结果进行分组
如果列是Null,我希望结果保持原样但如果不是,我想按该值对其进行分组?你是怎样做的?
编辑:抱歉,我想我应该提一个更具体的例子
下面的列包含类别,线程和回复的ID
这是一个论坛
具有空值的那些意味着它们没有任何回复
如果回复为null,我不想将其分组
目的是计算回复和类别中的线程
我没有将回复的值设置为null,因为连接的结果,它们就是这样
| category | thread | reply |
-------------------------------
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 2 | 3 |
| 2 | 3 | 4 |
| 3 | 4 | 5 |
| 3 | 4 | 6 |
| 4 | 5 | null |
| 5 | 6 | null |
Run Code Online (Sandbox Code Playgroud)
那么结果就是
| category | thread | reply |
-----------------------------
| 1 | 3 | 3 |
| 2 | 1 | 1 |
| 3 | 2 | 2 |
| 4 | 1 | null |
| 5 | 1 | null |
Run Code Online (Sandbox Code Playgroud)
Cur*_*urt 15
实际上,您可以在GROUP BY或ORDER BY子句中包含CASE语句:
ORDER BY CASE
WHEN reply IS NULL THEN 1
ELSE 0
END, category
Run Code Online (Sandbox Code Playgroud)
MySQL 会将所有 fr=null 的行分组为一组,就像它是一个普通值一样。
为了解决您的问题,我会对您的表进行子选择,其中新列要么获取 fr 的值(在它不为空的情况下),要么获取超出 fr 正常范围的增量值(可能是负数)。然后在新的虚拟列上执行外部选择分组。
set @i := 0;
select if(virtualFR<0,null,virtualFR) as fr, sum(fr_sum) from
(select *, if(fr is null,@i:=@i-1,fr) as virtualFR from myTable) virtual
group by virtualFR;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25565 次 |
| 最近记录: |