2

我有以下查询

SELECT info, count(*) as info_cnt 
FROM T
WHERE uid = 1 and info IN ('a', 'b','c', 'd')
GROUP BY info

它返回

+----------+--------+
| info_cnt | info   |
+----------+--------+
|      334 | a      |
|        2 | b      | 
|     1400 | d      |
+----------+--------+

如何编写查询以使其返回cas的计数0

4

3 回答 3

2

您可以创建一个临时表:

CREATE TEMPORARY TABLE info_values (v CHAR(1));
INSERT INTO info_values VALUES ('a'), ('b'), ('c'), ('d');

然后做一个LEFT JOIN

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
于 2013-01-22T19:05:52.357 回答
1

您不能以编写查询的方式返回零。如果你有info一个表中的值,你可以加入它们,或者你可以使用类似于这样的子查询:

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

于 2013-01-22T19:05:41.053 回答
0

请试试这个:

SQLFIDDLE 演示

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 |
于 2013-01-22T19:18:37.553 回答