[英]ORACLE SQL: select multiple rows basd on different values in one column for a same key value in another column
例如,我想获取一份清单,列出了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
所需的结果集是:
一种)
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?
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 );
假设组合(学生姓名,学期)是唯一的,则可以执行以下操作:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.