ID name date version value
1 A 9月5号 V1 2
2 A 9月5号 V2 3
3 B 9月5号 V2 3
4 B 9月5号 V1 1表是这样的我现在需要写一个SQL
第一个字段求 name 和 date分组 value均值
第二个字段求 name 和 date 和 version = V1 的value均值
第二个字段求 name 和 date 和 version = V2 的value均值如何写SQL 求大神帮助
1 A 9月5号 V1 2
2 A 9月5号 V2 3
3 B 9月5号 V2 3
4 B 9月5号 V1 1表是这样的我现在需要写一个SQL
第一个字段求 name 和 date分组 value均值
第二个字段求 name 和 date 和 version = V1 的value均值
第二个字段求 name 和 date 和 version = V2 的value均值如何写SQL 求大神帮助
IF EXISTS `kkk`;create table kkk(
`ID` smallint not null AUTO_INCREMENT,
`name` varchar(10) not null,
`date` varchar(10) not null,
`version` varchar(10) not null,
`value` int not null default 0,
PRIMARY KEY (`id`)
) ENGINE = MyISAM DEFAULT CHARSET = utf8;insert kkk values
(1, 'A', '9月5号', 'V1', 2),
(2, 'A', '9月5号', 'V2', 3),
(3, 'B', '9月5号', 'V2', 3),
(4, 'B', '9月5号', 'V1', 1),
(5, 'A', '9月6号', 'V2', 3),
(6, 'B', '9月6号', 'V2', 3),
(7, 'B', '9月7号', 'V1', 1);select va, vb, vc, da from (select avg(value) va, date da from kkk group by date) as aaa left join (select avg(value) vb, date db from kkk where version='V1' group by date) as bbb on aaa.da=bbb.db left join (select avg(value) vc, date dc from kkk where version='V2' group by date) as ccc on bbb.db=ccc.dc;drop table kkk;
date ,
AVG(value) AS avgvalue ,
SUM(CASE WHEN version = 'V1' THEN value
ELSE 0
END) / SUM(CASE WHEN version = 'V1' THEN 1
ELSE 0
END) AS v1avg ,
SUM(CASE WHEN version = 'V2' THEN value
ELSE 0
END) / SUM(CASE WHEN version = 'V2' THEN 1
ELSE 0
END) AS v2avg
FROM 表
GROUP BY name ,
date
AVG(value) AS avgvalue ,
AVG(CASE WHEN version = 'V1' THEN value END) AS avgV1 ,
AVG(CASE WHEN version = 'V2' THEN value END) AS avgV2
FROM
表名
GROUP BY
name,date
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
http://bbs.csdn.net/help#post_dispose
name date version avgvalue1 avgvalue2
A 9月5号 V1 2
A 9月5号 V2 3
A 9月5号 v3 1
A 9月5号 2
B 9月5号 V2 3
B 9月5号 V1 1
B 9月5号 2
这是两个分组语句union后的结果
第一个语句:
select concat_ws('-',name,date,version) as unionfields,avg(value) as avgv1, 0 as avgv2
from tname group by name,date,version
产生的结果如下:
unionfields avgv1 avgv2
A-9月5号-V1 2 0
A-9月5号-V2 3 0
A-9月5号-v3 1 0
B-9月5号-V2 3 0
B-9月5号-V1 1 0
第二个语句:
select concat_ws('-',name,date) as unionfields,0 as avgv1, Avg(value) as avgv2
from tname group by name,date
产生的结果如下:
unionfields avgv1 avgv2
A-9月5号 0 2
B-9月5号 0 2
联合两个结果集:
中间用union all
select concat_ws('-',name,date,version) as unionfields,avg(value) as avgv1, 0 as avgv2
from tname group by name,date,version
Union all
select concat_ws('-',name,date) as unionfields,0 as avgv1, Avg(value) as avgv2
from tname group by name,date order by unionfields desc
结果集如下:
unionfields avgv1 avgv2
A-9月5号-V1 2 0
A-9月5号-V2 3 0
A-9月5号-v3 1 0
A-9月5号 0 2
B-9月5号-V2 3 0
B-9月5号-V1 1 0
B-9月5号 0 2
可以用''替代0