2013-12-11 96 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