2013-12-11 58 views
0

给定一个ENUM列,其中有一些值,如a, b, c,我希望查询表GROUP BY该列使得即使没有找到行也返回默认数字(0)。group by all enum values without enum values

我见过使用CASE column WHEN 'a' THEN count = 0https://stackoverflow.com/a/12348380/1097483)的答案,但这需要我指定所有的ENUM值。

是否可以这样做而不指定列的ENUM值?

例如具有下列数据:

3行与 'A',2排与 'B',在 'C' 0行,

SELECT COUNT(*), enum FROM 
`table` 
GROUP BY enum 

会返回结果为 'A'和'b',但不是'c'。我如何获得所有可能的ENUM值?

+0

你能给相同的样本数据?你是否想要执行枢轴操作? – MarcinJuraszek

+0

我在问我的想法是一个普遍的问题,但我已经用一些示例数据更新了问题。 – xiankai

+0

你有一个列表中列出所有枚举值的表吗? – cha

回答

0

你需要控制表..然后左加入

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