是否有一种方法来执行if in group by子句?
我有一个查询,希望根据列的值将结果分组。
如果列是Null,我希望结果保持原样,但如果不是,我想按该值对其进行分组?你怎么做到的?
编辑:对不起,我想我应该举一个更具体的例子
下面的列包含类别、线程和答复的id。
是为了一个论坛
具有空值的那些表示它们没有任何答复。
如果回复为空,我不想将其分组
用于计数类别中的答复和线程
我没有将reply的值设置为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 |结果就是
| category | thread | reply |
-----------------------------
| 1 | 3 | 3 |
| 2 | 1 | 1 |
| 3 | 2 | 2 |
| 4 | 1 | null |
| 5 | 1 | null |发布于 2013-07-10 07:11:02
您实际上可以在GROUP BY或ORDER BY子句中包含CASE语句:
ORDER BY CASE
WHEN reply IS NULL THEN 1
ELSE 0
END, category发布于 2014-07-21 14:21:45
从MySQL5.6开始,您可以在order子句中使用IF()。
如下所示:
ORDER BY IF(reply=NULL, 1, 0), category对于你的具体情况,也许不是正确的答案,但对于其他人来说,寻找这样的东西却很方便。
发布于 2013-07-10 06:32:47
如果我明白你的意思,试试这样做:
(
SELECT category, COUNT(thread) AS thread, COUNT(reply) AS reply
FROM test
WHERE reply IS NOT NULL
GROUP BY category
)
UNION ALL
(
SELECT category, COUNT(thread) AS thread, reply
FROM test
WHERE reply IS NULL
GROUP BY category
)
ORDER BY categorySQL Fiddle
https://stackoverflow.com/questions/17563559
复制相似问题