现在有表结构如下,考号 学校名 学生姓名 语文成绩 数学成绩然后我统计了一下平均分和及格率:
select 学校 ,count(*) as 人数,
convert(decimal(18,2),avg(语文)) as 语文平均分,
ltrim(convert(decimal(18,2),sum(case when 语文>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 语文及格率,
ltrim(convert(decimal(18,2),sum(case when 语文>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 语文优秀率,
convert(decimal(18,2),avg(数学)) as 数学平均分,
ltrim(convert(decimal(18,2),sum(case when 数学>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 数学及格率,
ltrim(convert(decimal(18,2),sum(case when 数学>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 数学优秀率
from school
group by 学校 ;
但是问题出现了,我如何让结果按照考号从小到大的顺序排列呢?请各位指点,谢谢。
select 学校 ,count(*) as 人数,
convert(decimal(18,2),avg(语文)) as 语文平均分,
ltrim(convert(decimal(18,2),sum(case when 语文>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 语文及格率,
ltrim(convert(decimal(18,2),sum(case when 语文>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 语文优秀率,
convert(decimal(18,2),avg(数学)) as 数学平均分,
ltrim(convert(decimal(18,2),sum(case when 数学>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 数学及格率,
ltrim(convert(decimal(18,2),sum(case when 数学>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 数学优秀率
from school
group by 学校 ;
但是问题出现了,我如何让结果按照考号从小到大的顺序排列呢?请各位指点,谢谢。
1 A
2 A
3 B
4 A
5 B现在你的统计变成
学校 人数. ....
A 3
B 2还怎么按考号排号?
select 学校 ,count(*) as 人数,
convert(decimal(18,2),avg(语文)) as 语文平均分,
ltrim(convert(decimal(18,2),sum(case when 语文>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 语文及格率,
ltrim(convert(decimal(18,2),sum(case when 语文>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 语文优秀率,
convert(decimal(18,2),avg(数学)) as 数学平均分,
ltrim(convert(decimal(18,2),sum(case when 数学>=72 then 1 else 0 end)*100.0/count(*)))+'%' as 数学及格率,
ltrim(convert(decimal(18,2),sum(case when 数学>=96 then 1 else 0 end)*100.0/count(*)))+'%' as 数学优秀率
from school
group by 学校,left(考号,2)
order by left(考号,2)