首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql IF in GROUP BY子句

mysql IF in GROUP BY子句
EN

Stack Overflow用户
提问于 2013-07-10 06:10:11
回答 6查看 37.4K关注 0票数 10

是否有一种方法来执行if in group by子句?

我有一个查询,希望根据列的值将结果分组。

如果列是Null,我希望结果保持原样,但如果不是,我想按该值对其进行分组?你怎么做到的?

编辑:对不起,我想我应该举一个更具体的例子

下面的列包含类别、线程和答复的id。

是为了一个论坛

具有空值的那些表示它们没有任何答复。

如果回复为空,我不想将其分组

用于计数类别中的答复和线程

我没有将reply的值设置为null,它们是这样的,因为连接的结果。

代码语言:javascript
运行
复制
| 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    |

结果就是

代码语言:javascript
运行
复制
| category | thread | reply |
-----------------------------
| 1        | 3      | 3     |
| 2        | 1      | 1     |
| 3        | 2      | 2     |
| 4        | 1      | null  |
| 5        | 1      | null  |
EN

回答 6

Stack Overflow用户

发布于 2013-07-10 07:11:02

您实际上可以在GROUP BY或ORDER BY子句中包含CASE语句:

代码语言:javascript
运行
复制
ORDER BY CASE
            WHEN reply IS NULL THEN 1  
            ELSE 0 
         END, category
票数 15
EN

Stack Overflow用户

发布于 2014-07-21 14:21:45

从MySQL5.6开始,您可以在order子句中使用IF()。

如下所示:

代码语言:javascript
运行
复制
ORDER BY IF(reply=NULL, 1, 0), category

对于你的具体情况,也许不是正确的答案,但对于其他人来说,寻找这样的东西却很方便。

票数 4
EN

Stack Overflow用户

发布于 2013-07-10 06:32:47

如果我明白你的意思,试试这样做:

代码语言:javascript
运行
复制
(
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 category

SQL Fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17563559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档