例如,我想获取在3月,6月,9月和11月的所有4个学期注册的学生名单。但是,我不想选择在上述任何一个月内错过报名的学生,并且除了上述4个学期外还参加了学期。
STUDENT_NAME SEMESTER
------------ --------
John MAR
Christine NOV
John SEP
Nicholas JAN
John JUN
John NOV
Linda MAR
Christine SEP
Linda SEP
Nicholas MAR
Linda JUN
Linda NOV
所需的结果集如下:
A)
Student_Name Semester
------------ --------
John MAR
John JUN
John SEP
John NOV
Linda MAR
Linda JUN
Linda SEP
Linda NOV
B)
% STUDENT ENROLLED IN 4 SEMESTERS % STUDENT ENROLLED IN 2 SEMESTERS % STUDENT ENROLLED IN 1 SEMESTERS
------------------------- --------------------------------- -------------------------
50 30 20
上述两个输出A和B的高效SQL或PL / SQL是什么?
答案 0 :(得分:1)
select sum(case when semesters = 1 then 1 else else 0 end ) / count(*) as Pct_Students_enrolled_1,
sum(case when semesters = 2 then 1 else else 0 end ) / count(*) as Pct_Students_enrolled_2
sum(case when semesters = 4 then 1 else else 0 end ) / count(*) as Pct_Students_enrolled_4
from (
select student_name , count(*) as semesters
from enrolment_table
group by student_name );
答案 1 :(得分:0)
假设组合(student_name,semester)是唯一的,那么你可以这样做:
SELECT student_name, semester
FROM enrolment_table e
WHERE (SELECT COUNT(*) FROM enrolment_table
WHERE student_name = e.student_name
AND semester in ('MAR', 'JUN', 'SEP', 'NOV'))=4