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 に答える