有一个表,叫做student,结构如下:
学校名称   学生姓名    语文   数学
A           张三        78     21
A           李四        86     99
B           爱迪生      33     36
A           张三丰      100    45
B           吴彦祖      45     51
B           张韶涵      23     62
...........................要求统计结果格式如下:学校名称    语文平均分   语文及格率    数学平均分   数学及格率
A             35         27.21%           38           31.50%
B             55         78.56%           66           33.66%
也就就是说:要根据学校名称,统计出来学生的平均分和及格率(大于等于60分算及格,保留两位小数),但是吧,学校名称不能一个一个的手动输入查询,因为实在是太多了,我想来想去,也不知道如何查询SQL SERVER有这样的功能语句吗?恳请各位大师指点迷津

解决方案 »

  1.   

    select sum(语文)/count(*) as 语文平均分,ltrim(sum(case when 语文>=60 then 1 else 0 end)*100.0/count(*))+'%' as 语文及格率,sum(数学)/count(*) as 数学平均分, ltrim(sum(case when 数学>=60 then 1 else 0 end)*100.0/count(*))+'%' as 数学及格率
    from student
    group by 学校名称
      

  2.   

    select schoolname, avg(yuwen),yuwen1=(select count(*) from tb where yuwen>60 group by schoolname/select count(*) from tb)
    avg(shuxue),shuxue1=(select count(*) from tb where shuxue>60 group by schoolname/select count(*) from tb)
    from tb
    group by schoolname
      

  3.   

    select avg(语文) as 语文平均分,ltrim(sum(case when 语文>=60 then 1 else 0 end)*100.0/count(*))+'%' as 语文及格率,avg(数学) as 数学平均分, ltrim(sum(case when 数学>=60 then 1 else 0 end)*100.0/count(*))+'%' as 数学及格率
    from student
    group by 学校名称
      

  4.   

    給你一個具體的:
    create table #mytable(
    学校名称 char(2),
    学生姓名 char(6),
    语文 smallint,
    数学 smallint
    )
    insert into #mytable
    select 'A','张三',78,21
    union all
    select 'A','李四',86,99
    union all
    select 'B' ,'爱迪生',33,36
    union all
    select 'A','张三丰',100,45
    union all
    select 'B','吴彦祖',45,51
    union all
    select 'B','张韶涵',23,62
    select 学校名称,语文平均分=avg(语文)
    ,语文及格率=sum(case when 语文>=60 then 1 else 0 end)*1.0/count(*)
    ,数学平均分=avg(数学),数学及格率=sum(case when 数学>=60 then 1 else 0 end)*1.0/count(*)
    from #mytable
    group by 学校名称
      

  5.   

    create table student(学校名称 varchar(2), 学生姓名 varchar(8), 语文 int, 数学 int)
    insert student
    select 'A','张三', 78 ,21 union all
    select 'A','李四', 86 ,99 union all
    select 'B','爱迪生', 33 ,36 union all
    select 'A','张三丰', 100 ,45 union all
    select 'B','吴彦祖', 45 ,51 union all
    select 'B','张韶涵', 23 ,62
     
    select 学校名称,avg(语文) as 语文平均分,
    ltrim(cast(sum(case when 语文>=60 then 1 else 0 end)*100.0/count(*) as decimal(10,2)))+'%' as 语文及格率,
    avg(数学) as 数学平均分, 
    ltrim(cast(sum(case when 数学>=60 then 1 else 0 end)*100.0/count(*) as decimal(10,2)))+'%' as 数学及格率
    from student
    group by 学校名称/*
    学校名称 语文平均分       语文及格率                      数学平均分       数学及格率                                     
    ---- ----------- ----------------------------------------- ----------- ----------------------------------------- 
    A        88          100.00%                                   55          33.33%
    B        33          0.00%                                     49          33.33%(所影响的行数为 2 行)
    */
      

  6.   

    create table student(学校名称 char(10),学生姓名 char(20),语文 decimal(5,2),数学 decimal(5,2))
    insert into student
    select 'A','张三', 78, 21
    union
    select 'A','李四', 86, 99
    union
    select 'b','爱迪生', 33, 36
    union
    select 'A','张三丰', 100, 45
    union
    select 'b','吴彦祖', 45, 51
    union
    select 'b','张韶涵', 23, 62select a.学校名称,avg(a.语文) as 语文平均分,sum(case when a.语文>=60 then 1.00 else 0.00 end)/cast(count(*) as decimal(5,2)) as 语文及格率,
    avg(a.数学) as 数学平均分,sum(case when a.数学>=60 then 1.00 else 0.00 end)/count(*) as 数学及格率 from student a
    group by a.学校名称
      

  7.   

    create table student(学校名称 char(10),学生姓名 char(20),语文 decimal(5,2),数学 decimal(5,2))
    insert into student
    select 'A','张三', 78, 21
    union
    select 'A','李四', 86, 99
    union
    select 'b','爱迪生', 33, 36
    union
    select 'A','张三丰', 100, 45
    union
    select 'b','吴彦祖', 45, 51
    union
    select 'b','张韶涵', 23, 62select a.学校名称,cast(avg(a.语文) as decimal(5,2))  as 语文平均分,
    rtrim(cast(sum(case when a.语文>=60 then 1.00 else 0.00 end)/count(*)*100 as decimal(5,2)))+'%' as 语文及格率 ,
    cast(avg(a.数学) as decimal(5,2)) as 数学平均分,
    rtrim(cast(sum(case when a.数学>=60 then 1.00 else 0.00 end)/count(*)*100 as decimal(5,2)))+'%' as 数学及格率 
    from student a
    group by a.学校名称
      

  8.   

    这事情可以交给数据库做easy!