频道栏目
IT货架 > > 正文
SQL group by 统计有关问题
网友分享于:Jun 12, 2018 10:42:07 PM    来源: IT货架   
SQL group by 统计问题求助
学生每天竞技比赛,赢了得分,输了负分,0表示当天没参加比赛。


原表格:
日期 学号 姓名 成绩
2010/10/15 1 张三 857
2010/10/15 2 李四 -8
2010/10/15 3 王五 145
2010/10/16 1 张三 516
2010/10/16 2 李四 -28
2011/6/18 3 王五 32
2011/6/18 1 张三 58
2011/6/18 2 李四 0


希望求得:

学号 姓名 2010总成绩 2010最高分 2010/9/1-2010/10/16的最低分(a) 2011/1/1 - 2011/9/1的最高分(b) 分数差a-b 提高比例((a-b)/a) 时间1 时间2





时间1 = 2010/9/1-2010/10/16 时间2 = 2011/1/1 - 2011/9/1


感谢各位大神帮助!!!求具体代码,没搜到闷。

大家新春快乐!

------解决方案--------------------
select stuno as 学号,stuname as 姓名,[2010总成绩],[2010最高分],
A,B,(A-B) AS '分数差',(A-B)/A as '提高比例',
'2010/9/1-2010/10/16' as '时间1',
 '2011/1/1 - 2011/9/1' as '时间2'
from(
select *from
(select stuno,stuname ,
SUM(score) as '2010总成绩',MAX(score) as '2010最高分' 
from tbl
where YEAR([date])=2010
group by stuname,stuno)a
inner join
(select stuno as 学号,MIN(score) as 'A' from tbl
where [date] between '2010/9/1' and '2010/10/16'
group by stuno)b 
on a.stuno=b.学号
inner join
(select stuno as number,MAX(score) as 'B' from tbl
where [date] between '2011/1/1' and '2011/9/1'
group by stuno)c 
on a.stuno=c.number
)d

/*
你要的是这个结果??
学号 姓名 2010总成绩 2010最高分 A B 分数差 提高比例 时间1 时间2
1 张三 1373 857 516 58 458 0 2010/9/1-2010/10/16 2011/1/1 - 2011/9/1
2 李四 -36 -8 -28 0 -28 1 2010/9/1-2010/10/16 2011/1/1 - 2011/9/1
3 王五 145 145 145 32 113 0 2010/9/1-2010/10/16 2011/1/1 - 2011/9/1
*/

广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1