2013-03-17 122 views
-3

也许一个不平凡的查询数多行组,我用这台http://sqlfiddle.com/#!2/d0423,并试图输出用mysql 5.6SQL查询的类型

[type][type_cnt][f_cnt_type0][f_cnt_type1][f_cnt_type2][time_00][time_00-15][time_15-30] 
10  2   1    1   0   1   1   0 
20  3   1    1   1   1   2   0 
30  3   2    1   0   0   1   1 

任何想法如下表?

+1

貌似简单'集团BY'像这样的列:'SUM(CASE WHEN ... THEN ... ELSE 0 END)'。在MySQL中,也可以使用'COUNT(布尔表达式)'。 – 2013-03-17 01:56:22

+0

@Mitch小麦:不知道为什么这被标记下来。我做了米奇。我可以做几个查询类型,计数('列')和按类型分组,但不知道如何做其他人的一个语句或嵌套语句。如果您想提供帮助,非常感谢。 – luis 2013-03-17 02:46:22

+0

@ PM 77-1:谢谢。这就是诀窍! – luis 2013-03-17 03:58:24

回答

0
CREATE TABLE bugs (
    type varchar(2), 
    flag varchar(1), 
    mins varchar(2) 
); 

INSERT INTO bugs(type, flag, mins) values 
('10','0','0'), 
('10','1','5'), 
('20','0','0'), 
('20','1','5'), 
('20','2','10'), 
('30','0','10'), 
('30','0','20'), 
('30','1','40'); 


select 
    type, 
    count(type) as type_cnt, 
    SUM(CASE WHEN flag='0' THEN 1 ELSE 0 END) as f_cnt_type0, 
    SUM(CASE WHEN flag='1' THEN 1 ELSE 0 END) as f_cnt_type1, 
    SUM(CASE WHEN flag='2' THEN 1 ELSE 0 END) as f_cnt_type2, 
    SUM(CASE WHEN CAST(mins AS UNSIGNED) = 0 THEN 1 ELSE 0 END) as time_00, 
    SUM(CASE WHEN CAST(mins AS UNSIGNED) > 0 and CAST(mins AS UNSIGNED) <= 15 THEN 1 ELSE 0 END) as time_00_15, 
    SUM(CASE WHEN CAST(mins AS UNSIGNED) > 15 and CAST(mins AS UNSIGNED) <= 30 THEN 1 ELSE 0 END) as time_15_30  
from bugs 
group by type 

SQL:sqlfiddle