select  课程,sum(case when  分数>=90 then  1 
                          when  90>分数>=80 then  1 
                          when  80>分数>=70 then  1                    
                          when  70>分数>=60 then  1
                          when  分数<60 then  1) as 人数,
                 sum(case when  分数>=90 then  分数 /sum(case when  分数>=90 then  1 )
                          when  90>分数>=80 then  分数 /sum(case when  90>分数>=80 then  1) 
                          when  80>分数>=70 then  分数 /sum(case when  80>分数>=70 then  1 )
                          when  70>分数>=60 then  分数 /sum(case when  70>分数>=60 then  1 )
                          when  分数<60 then  分数 /sum(case when  分数<60 then  1  ) as   平均分数
from studentscore order by 课程提示:第 2 行: '>' 附近有语法错误。

解决方案 »

  1.   

    是这个意思吧..
    select  课程,sum(case when  分数 is not null then 1 end) as 人数
                     sum(分数)/sum(case when  分数 is not null then 1 end)as   平均分数
    from studentscore order by 课程
      

  2.   

    same question 
    HTTP://www.ebigear.com/Fund/PlayNews.php?NewsID=29453&ID=285885
      

  3.   

    ...
    select  课程,sum(case when  分数 is not null then 1 end) as 人数,
                     sum(分数)/sum(case when  分数 is not null then 1 end)as   平均分数
    from studentscore order by 课程
      

  4.   

    when  90>分数>=80 then  1
    语法有错误,应该这样来写:
    when  分数<90 AND 分数>=80 then 1
    SQL中不支持"90>分数>=80 "这样的表达式
      

  5.   

    是不是这个意思:
    select
    IsNull(C2.人数,0) AS '人数',
    IsNull(C2.平均分,0) AS '平均分',
    IsNull(C3.人数,0) AS '人数',
    IsNull(C3.平均分,0) AS '平均分'
    from 
    (select count(id)as'人数', sum(分数)/sum(case when  分数 is not null then 1 end)as   '平均分' from studentscore 
    where 分数<90 AND 分数>=80 ) C2  , 
    (select count(id)as'人数', sum(分数)/sum(case when  分数 is not null then 1 end)as   '平均分' from studentscore 
    where 分数<80 AND 分数>=70 ) C3  , 
      

  6.   

    select  课程,sum(case when  分数>=90 then  1 
                              when 分数<90 AND 分数>=80  then  1 
                              when  分数<80 AND 分数>=70  then  1                    
                              when  分数<70 AND 分数>=60  then  1
                              when  分数<60 then  1) as 人数,
                     sum(case when  分数>=90 then  分数 /sum(case when  分数>=90 then  1 )
                              when  分数<90 AND 分数>=80 then  分数 /sum(case when  90>分数>=80 then  1) 
                              when  分数<80 AND 分数>=70  then  分数 /sum(case when  80>分数>=70 then  1 )
                              when  分数<70 AND 分数>=60 then  分数 /sum(case when  70>分数>=60 then  1 )
                              when  分数<60 then  分数 /sum(case when  分数<60 then  1  ) as   平均分数
    from studentscore order by 课程
    现在提示:
    服务器: 消息 170,级别 15,状态 1,行 6
    第 6 行: ')' 附近有语法错误。
      

  7.   

    逻辑上看~~你第二个sum里的逻辑混乱~~~
    语法上看~~case 的语法是case when then end ~你没写end
      

  8.   

    case就是行级的~~你在case里写case还用sum集合函数~~明显逻辑有问题
      

  9.   

    你的第一个sum里写了那么多when~~看上去应该和is not null是一个意思
      

  10.   


    下面是我目前的代码:select  课程,sum(case when  分数>=90 then  1  
                              when 分数<90 AND 分数>=80  then  1  
                              when  分数<80 AND 分数>=70  then  1                   
                              when  分数<70 AND 分数>=60  then  1 
                              when  分数<60 then  1 end ) as  人数,
                sum(case when  分数>=90 then  分数 /sum(case when  分数>=90 then  1 )
                              when  分数<90 AND 分数>=80 then  分数 /sum(case when  分数<90 AND 分数>=80 then  1) 
                              when  分数<80 AND 分数>=70  then  分数 /sum(case when  分数<80 AND 分数>=70 then  1 )
                              when  分数<70 AND 分数>=60 then  分数 /sum(case when  分数<70 AND 分数>=60 then  1 )
                              when  分数<60 then  分数 /sum(case when  分数<60 then  1  end )) as   平均分数
    from studentscore order by 课程
    提示:服务器: 消息 170,级别 15,状态 1,行 6
    第 6 行: ')' 附近有语法错误。请问如何更改