繁体   English   中英

ORACLE SQL:根据另一列中的相同键值选择基于一列中不同值的多行

[英]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个以外的学期入学的学生。

ENROLMENT_TABLE

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM