select sc.cid as 课程ID,course.name as 课程名 ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0

这是什么语法啊,求解释

以下是全文
-- 23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

select sc.cid as 课程ID,course.name as 课程名
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85-70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [60 - 70]
,SUM(CASE WHEN score< 60 THEN 1 ELSE 0 END) AS [<60]
from sc,course
where sc.cid=course.cid
group by sc.cid,course.name

首先,简单说一下case when语法:1、以CASE开头,以END结尾
2、分支中WHEN 后跟条件,THEN为显示结果
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加4、END 后跟别名

下面说一下你的语句:根据sc表中cid 和 course表中name 分组,然后对不同分数范围进行人数统计。
以SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]为例,当score在85和100之间时,此条记录在总人数中增加1,否则为0(也就是不增加),从而达到将这一分数段人数求和的目的。
其他的也是同样道理。

希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-29
这是报表中最常用的行专列事项方式 ,也是分段统计人数、个数等count()信息的方法。
可以想象成追条数据对你的表进行扫描:第一条数据的分数在你指定的分数段[100-85]时计数器记录一个1如果不是那么计数器记录成0,然后是[85-70],[60 - 70],[<60]
每条数据都被你的sum里面语句选择一遍,然后求和最后的总数。
第2个回答  2012-11-27
竖表统计成横表的典型写法,sc这张表里应该是不同人不同科目的成绩,每人每门一条记录,这个sql可以分成两步来看。比如sc的数据是这样的:
学号 课程ID 成绩
01 001 100
02 001 88
03 001 65
04 001 92
05 001 99

第一步用case when判断成绩区间,就产生如下记录
学号 85-100 70-85 60-70 <60
01 1 0 0 0
02 1 0 0 0
03 0 0 1 0
04 1 0 0 0
05 1 0 0 0
第二步用group by加起来,就变成了一张统计表
85-100 70-85 60-70 <60
4 0 1 0追问

我是想知道
CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0
的语法是怎样的?

追答

CASE
WHEN sex ='1'THEN'男'
WHEN sex ='2'THEN'女'
ELSE'其他'END

第3个回答  2012-11-28
在那个区间就是1,不在就是0 ,0+0=0,1+0=1,sum +
第4个回答  2012-11-28
sql语法,看英文意思大概就能知道意思了啊
统计数据的时候经常用到
相似回答