mh:工时 mhtype:工时类型(6种)字段:userid mhtype mh
001 1 5
001 1 3
001 2 4
001 3 9
002 5 5
002 6 7
002 3 4
002 3 9要求统计出每个人每一类工时的总合
结果要求如下格式
userid mhtype1 mhtype2 mhtype3 mhtype4 mhtype5 mhtype6 allmh
001 8 4 9 0 0 0 21
002 0 0 13 0 5 7 25
001 1 5
001 1 3
001 2 4
001 3 9
002 5 5
002 6 7
002 3 4
002 3 9要求统计出每个人每一类工时的总合
结果要求如下格式
userid mhtype1 mhtype2 mhtype3 mhtype4 mhtype5 mhtype6 allmh
001 8 4 9 0 0 0 21
002 0 0 13 0 5 7 25
create table lk4(
userid mediumint(3) unsigned zerofill not null,
mhtype int not null,
mh int not null);
insert into lk4 values
(001,1,5),
(001,1,3),
(001,2,4),
(001,3,9),
(002,5,5),
(002,6,7),
(002,3,4),
(002,3,9);select userid,
sum((case when mhtype=1 then mh else 0 end )) as 'mhtype1',
sum((case when mhtype=2 then mh else 0 end )) as 'mhtype2',
sum((case when mhtype=3 then mh else 0 end )) as 'mhtype3',
sum((case when mhtype=4 then mh else 0 end )) as 'mhtype4',
sum((case when mhtype=5 then mh else 0 end )) as 'mhtype5',
sum((case when mhtype=6 then mh else 0 end )) as 'mhtype6',
sum(mh) as 'allmh'
from lk4 group by userid;
结果:+--------+---------+---------+---------+---------+---------+---------+-------+
| userid | mhtype1 | mhtype2 | mhtype3 | mhtype4 | mhtype5 | mhtype6 | allmh |
+--------+---------+---------+---------+---------+---------+---------+-------+
| 001 | 8 | 4 | 9 | 0 | 0 | 0 | 21 |
| 002 | 0 | 0 | 13 | 0 | 5 | 7 | 25 |
+--------+---------+---------+---------+---------+---------+---------+-------+
2 rows in set (0.00 sec)
SQL是数据提取、管理统计的工具,其他语言(ex:PHP,Python,JSP,ASP...)通常是UI工具(甚至包括Excel)。
SQL当然可以完成这种报表输出,但并非其特长;其他语言当然可以完成计数汇总统计,但所长在数据展现上。
像这样的需求建议在SQL中完成基本统计后提交结果集给其他语言,由其完成报表展现。
在这个例子中,SQL可以简单的处理为:select userid, mhtype, mh=sum(mh) from lk4 group by userid, mhtype
从其他语言中将数据按客户需求格式拼接输出。
非常不错的,高手,有些关键字,我们还没有学过。佩服!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!学习了,在此。
能否解一下,case ,when,else ,end 的用法呀??