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 求大神幫助
uj5u.com熱心網友回復:
USE test;
DROP TABLE
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;
uj5u.com熱心網友回復:
SELECT name ,
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
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
SELECT 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
uj5u.com熱心網友回復:
結帖率:0%當您的問題得到解答后請及時結貼.
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.html
8、如何給分和結貼?
http://bbs.csdn.net/help#post_dispose
uj5u.com熱心網友回復:
樓主是要的如下資料嗎?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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/112385.html
標籤:MySQL
