有一张表码值 学号 成绩
1 1 90
2 2 40
3 1 20
4 3 60
5 1 5
希望求出各个学号的总分和 有多少次成绩大于60分希望得到的表格
学号 总成绩 次数
1 115 1
2 40 0
3 60 1用group by 能弄出总成绩,可次数不会弄
跪求解决,希望有代码。

解决方案 »

  1.   


    select 学号 , 
           sum(成绩) 总成绩,
           sum(case when 成绩 >= 60 then1 else 0 end) 次数
    from tb
    group by 学号
      

  2.   

    create table tb(码值 int,学号 int,成绩 int)
    insert into tb values(1 ,1 ,90)
    insert into tb values(2 ,2 ,40)
    insert into tb values(3 ,1 ,20)
    insert into tb values(4 ,3 ,60)
    insert into tb values(5 ,1 ,5)
    goselect 学号 , 
           sum(成绩) 总成绩,
           sum(case when 成绩 >= 60 then 1 else 0 end) 次数
    from tb
    group by 学号drop table tb/*
    学号          总成绩         次数          
    ----------- ----------- ----------- 
    1           115         1
    2           40          0
    3           60          1(所影响的行数为 3 行)
    */
      

  3.   

      if OBJECT_ID('tb') is not null
     drop table tb
      go 
       create table tb (码值 int,学号 int, 成绩 int)
       insert into tb 
       select 1,1,90 union all 
       select 2,2,40 union all 
       select 3,1,20 union all 
       select 4,3,60 union all 
       select 5,1,5
     
    --   希望求出各个学号的总分和 有多少次成绩大于60分--希望得到的表格
    --学号 总成绩 次数
    --1 115 1
    --2 40 0
    --3 60 1
    select 学号,SUM(成绩) as  总成绩 ,sum(case when 成绩>60 then 1 else 0 end )as  次数 from tb group by 学号(5 行受影响)学号          总成绩         次数
    ----------- ----------- -----------
    1           115         1
    2           40          0
    3           60          0(3 行受影响)
      

  4.   

    select 学号,
          sum(成绩) 总成绩,
          sum(case when 成绩 >=60 then 1 else 0 end )次数
     from tb
    group by 学号