SUMSEN

Oracle&Sql爱好者,用友NC管理员

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 假设有张学生成绩表(CJ)如下 
[姓名] [学科] [成绩] 
张三 语文 80 
张三 数学 86 
张三 英语 75 
李四 语文 78 
李四 数学 85 
李四 英语 78 

现有需求如下:
(1)要求统计分数段的人数。显示结果为:
[成绩]      [人数]
0<成绩<60      0 
60<成绩<80      3
80<成绩<100    3

with w as (select 'zhang' name, 'chinese' subject,80 score from dual
  union all
          select 'zhang' name, 'math' subject,86 score from dual
       
  union all
 
  select 'zhang' name, 'english' subject,75 score from dual
  union all
 
  select 'li' name, 'english' subject,78 score from dual
  union all
 
  select 'li' name, 'math' subject,85 score from dual
  union all
 
  select 'li' name, 'chinese' subject,78 score from dual
  )
 select w.*  from w

with w as (select 'zhang' name, 'chinese' subject,80 score from dual
  union all
          select 'zhang' name, 'math' subject,86 score from dual
       
  union all
  
  select 'zhang' name, 'english' subject,75 score from dual
  union all
  
  select 'li' name, 'english' subject,78 score from dual
  union all
  
  select 'li' name, 'math' subject,85 score from dual
  union all
  
  select 'li' name, 'chinese' subject,78 score from dual
  )
 select w.*  from w 

  select w.*, decode( score, score >=0 and score<60  ,'0-60',
     score>=60 and score<80, '60-80', score>=80 and score<100 , '80-100', else)  from w
这样不行

 

select dj,count(*) rs from(select xm,xk,case when cj>=0 and cj<60 then 'c' when cj>=60 and cj<80 then 'b' when cj>=80 and cj<=100 then 'a' end dj from cjb)
group by dj

 

posted on 2012-12-28 17:42  sumsen  阅读(295)  评论(0编辑  收藏  举报