六,在案例函数中使用合计函数
假设有下面一个表
学号(std_id) | 课程ID(类标识码) | 课程名(CLASS_NAME) | 主修标志(main_class_flg) |
100 | 1 | 经济学 | ÿ |
100 | 2 | 历史学 | ñ |
200 | 2 | 历史学 | ñ |
200 | 3 | 考古学 | ÿ |
200 | 4 | 计算机 | ñ |
300 | 4 | 计算机 | ñ |
400 | 五 | 化学 | ñ |
500 | 6 | 数学 | ñ |
有的学生选择了同时修几门课程(100,200)也有的学生只选择了一门课程(300,400,500)。选修多门课程的学生,要选择一门课程作为主修,主修里面写入Y.只选择一门课程的学生,主修标志为N(实际上要是写入Ý的话,就没有下面的麻烦事了,为了举例子,还请多多包含)。
现在我们要按照下面两个条件对这个表进行查询
- 只选修一门课程的人,返回那门课程的ID
- 选修多门课程的人,返回所选的主课程ID
select s_id,
case when count(1)=1 then max(c_id) else
max( case when flag = 'Y' then c_id else null end)
end as c_id
from study group by s_id;
case when count(1)=1 then max(c_id) else
max( case when flag = 'Y' then c_id else null end)
end as c_id
from study group by s_id;