想在oracle实现这样的查询:通过两个表来查询,一个表是专业表,一个表是学生表。查询第一列为学校所有专业的名称,第二列至第五列为各专业每个年级的总人数,例:
专业名称 2002级学生总人数 2003级学生总人数 2004级学生总人数 2005级
哲学 0 150 165 175
法学 155 0 160 170
医学 155 0 160 170
英语 155 0 160 170
俄语 155 0 160 170
这样的查询如何通过sql语句来实现?
select subject_name "专业名称",
sum(decode(grade,2002,1,0)) "2002级学生总人数",
sum(decode(grade,2003,1,0)) "2003级学生总人数",
sum(decode(grade,2004,1,0)) "2004级学生总人数",
sum(decode(grade,2005,1,0)) "2005级学生总人数"
from 专业表 a,学生表 b
where a.subject_id = b.subject_id
group by a.subject_name
select 专业表.专业,T1.scount1 as 2002级学生总人数,T2.scount2 as 2003级学生总人数,
T3.scount3 as 2004级学生总人数,T4.scount4 as 2005级学生总人数
from 专业表
left join (select 专业,count(1) as scount1 from 学生表 where 年级=2002 group by 专业) T1
on 专业表.专业 = T1.专业
left join (select 专业,count(1) as scount2 from 学生表 where 年级=2003 group by 专业) T2
on 专业表.专业 = T2.专业
left join (select 专业,count(1) as scount3 from 学生表 where 年级=2004 group by 专业) T3
on 专业表.专业 = T3.专业
left join (select 专业,count(1) as scount4 from 学生表 where 年级=2005 group by 专业) T4
on 专业表.专业 = T4.专业