首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中使用group by时,count(*)不返回0

问在MySQL中使用group by时,count(*)不返回0
EN

Stack Overflow用户
提问于 2013-01-23 02:58:35
回答 3查看 2.3K关注 0票数 1

我有以下查询

代码语言:javascript
复制
SELECT info, count(*) as info_cnt 
FROM T
WHERE uid = 1 and info IN ('a', 'b','c', 'd')
GROUP BY info

它返回

代码语言:javascript
复制
+----------+--------+
| info_cnt | info   |
+----------+--------+
|      334 | a      |
|        2 | b      | 
|     1400 | d      |
+----------+--------+

如何编写查询,使其以0形式返回c的计数。

EN

回答 3

Stack Overflow用户

发布于 2013-01-23 03:05:52

您可以创建一个临时表:

代码语言:javascript
复制
CREATE TEMPORARY TABLE info_values (v CHAR(1));
INSERT INTO info_values VALUES ('a'), ('b'), ('c'), ('d');

然后做一个LEFT JOIN

代码语言:javascript
复制
SELECT v, count(uid) as info_cnt 
FROM info_values
LEFT JOIN T ON uid = 1 AND T.info = info_values.v
GROUP BY v
票数 2
EN

Stack Overflow用户

发布于 2013-01-23 03:05:41

对于编写查询的方式,不能返回零。如果表中有info值,则可以对其进行连接,也可以使用类似以下内容的子查询:

代码语言:javascript
复制
SELECT c.info, count(t1.info) as info_cnt 
FROM 
(
  select 'a' info
  union all
  select 'b'
  union all
  select 'c'
  union all
  select 'd'
) c
left join T t1
  on c.info = t1.info
  and t1.info IN ('a', 'b','c', 'd')
where uid = 1
GROUP BY c.info

请参阅SQL Fiddle with Demo

票数 1
EN

Stack Overflow用户

发布于 2013-01-23 03:18:38

请试试这个:

SQLFIDDLE DEMO

代码语言:javascript
复制
select distinct t.info, coalesce(a.cnt,0) counts
from T
left join 
(select info, count(*) as cnt
 from T where
 uid = 1
 and info in ('a', 'b', 'c', 'd')
group by info)a
 on t.info = a.info
 group by t.info
;

| INFO | COUNTS |
-----------------
|    a |      2 |
|    b |      1 |
|    c |      0 |
|    d |      3 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14465970

复制
相关文章

相似问题

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