select 学号,count(成绩)
from 表
where 成绩>=90
group by 学号
结果是“未选定行”,就是说没有符合条件的记录但是我希望结果是
学号,大于90分的科目数
1     0
2     0
3     0即使没有也用零还表示出来,该怎么做?

解决方案 »

  1.   

    select 学号,count(case when 成绩>=90 then 1 else 0 end)  科目数
    from 表 
    group by 学号 
      

  2.   

    那么where 后面还能加条件吗?
    比如还有一个学期的字段
    我查询:学号为1的学生在某个学期的大于90分的科目数,该怎么写呢?
      

  3.   

    select 学号,count(case when 成绩>=90 then 1 else 0 end)  科目数 
    from 表
    WHERE SNO=1 
    group by 学号 
      

  4.   

    select 学号,sum(case when 成绩>=90 then 1 else 0 end)  科目数(>90分) 
    from 表 
    group by 学号 
      

  5.   

    select 学号,sum(case when 成绩>=90 then 1 else 0 end)  大于90分科目数 
    from 表 
    group by 学号 求和用SUM啊!
      

  6.   


    可以加的,如下:
    select 学号,sum(case when 成绩>=90 then 1 else 0 end)  大于90分科目数 
    from 表 where 学号=1 
    group by 学号 
      

  7.   

    不对呀?我明明没有大于90分的,怎么查出来所有记录都成了满足条件的了?
    学号为1的学生,比如有5条记录
    查出结果就是:学号  科目数
    1    5怎么回事呀?我用了“count(case when 成绩>=90 then 1 else 0 end) ”了呀?
      

  8.   

    加什么条件都可以,自己在where后面定义条件
      

  9.   

    用sum好像就对了,糊涂了,用count那表示什么意思了?
    什么时候用count啊
      

  10.   

    用count肯定错了啊,应该用SUM
    因为case when 成绩>=90 then 1 else 0 end这句已经把所有科目的成绩分为大于90(1)和小于90(0)
    两种了,如果一个学生有五科,那么这个学生就会有5条记录,其中可能有几条记录值为0
    用count就会得到5,因为它计算记录数,但是你是为了得到大于90的,也就是值为1,所以就用sum
      

  11.   

    明白了,谢谢。
    还有一个问题:如果还有其他的一些条件,把条件加在case后面和加在where后面有什么区别?
      

  12.   

    第一个语句你用where条件就过滤掉了
      

  13.   

    如果我就是想用count计数,计数为零的表示为0,怎么做呢?
      

  14.   

    count不是计数的函数吗?为什么不能返回为零的记录?
      

  15.   

    加在case后面是为了分类,加在where后面是用来过滤的
    比如你想把成绩分为不及格(<60),及格(>=60 and <90)和优秀(>=90)
    那这个条件就要放在Case后面
    如果得到及格(>=60)的成绩中大于90的科目数
    那这个条件>=60就应该放在where后
      

  16.   

    count 是聚合函数,后面不能用where的 要+限定条件的话用having
      

  17.   

    select 学号,nvl(count(case when 成绩>=90 then 'a' else null end),0) 大于90分科目数 
    from 表 
    group by 学号
    having 学号=1 
    或者
    select 学号,nvl(count(case when 成绩>=90 then 1 else null end),0) 大于90分科目数 
    from 表 
    group by 学号
    having 学号=1 
    这里的'a'和1随便写,只代表返回了行数,如果为null就表示不返回行