分组统计的问题

MySql 码拜 8年前 (2016-05-18) 1167次浏览
数据
分组统计的问题
1.按学校分组
2.各学校总人数除以2=参评人数
3.按排名先后统计(参评人数)计算总分、平均分
例如:中心小学1有80名学生,参评人数就是40人,按照排名的先后统计中心小学1的前40名的总分和平均分。
各个学校的人数都不一样,不知道怎么样解决,请各位高手帮帮忙
解决方案

40

create table t(school varchar(10), name varchar(10), chinease decimal(10,2));
insert t values
("a", "aa", 100), ("a", "bb", 78), ("a", "cc", 98), ("a", "dd", 23), ("a", "ee", 50),
("a", "ff", 100), ("a", "gg", 78), ("a", "hh", 98), ("a", "ii", 23), ("a", "jj", 50),
("b", "aa", 100), ("b", "bb", 78), ("b", "cc", 98), ("b", "dd", 23), ("b", "ee", 50);
select a.school, a.cnt, sum(b.chinease), avg(b.chinease)
from(
	select school, count(*) / 2 as cnt from t group by school
) a,
(
	select a.* , @i:=if(@s=school, @i+1,1) as _r,@s:=school
	from t a, (select @i:=0,@s:=null) _r
	order by school, chinease   -- school + (你的 排名,应该是 rank 列吧,本人的例表中没有这个,实际用时本人改 )
)b
where a.school=b.school and b._r <= a.cnt
group by a.school
;
drop table if exists t;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明分组统计的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)