给定一个包含一些值(如a, b, c )的ENUM列,我希望查询表,对该列执行GROUP BY操作,这样即使没有找到行,也会返回默认数字(0)。
我见过使用CASE column WHEN 'a' THEN count = 0 (https://stackoverflow.com/a/12348380/1097483)的答案,但这需要我指定所有的ENUM值。
是否可以在不指定列的ENUM值的情况下执行此操作?
例如,使用以下数据:
3行包含'a',2行包含'b',0行位于'c',
SELECT COUNT(*), enum FROM
`table`
GROUP BY enum将返回'a‘和'b’的结果,但不返回'c‘的结果。如何获取所有可能的ENUM值?
发布于 2013-12-11 12:42:44
你需要一个控制表..然后左连接
create table enumtbl (
enum varchar(10));
create table tbl (
enum varchar(10));
insert into enumtbl values ('A');
insert into enumtbl values ('B');
insert into enumtbl values ('C');
insert into tbl values ('A');
insert into tbl values ('A');
insert into tbl values ('A');
insert into tbl values ('A');
insert into tbl values ('B');
insert into tbl values ('B');
select e.enum, coalesce(t.cnt,0) as cnt
from enumtbl e
left join (
select enum, count(*) as cnt
from tbl
group by enum) t
on e.enum = t.enum;sqlfiddle
https://stackoverflow.com/questions/20510474
复制相似问题