查询以查找针对特定列的多个值的实例:Oracle SQL

时间:2017-11-28 17:50:28

标签: sql oracle

我在oracle中有一个带有fol结构的表: -

---------------------------------------------------------------
 student_id  | Subject_Name | Is_Additional  | Is_Major
---------------------------------------------------------------
   9001         Physics            Yes             Yes
   9001         Algebra            Yes             No
   9001         English            Yes             No
   9002         Physics            Yes             Yes (9002)
   9002         Algebra            Yes             Yes
   9004         Mathematics        Yes             Yes
   9005         English            Yes             Yes  (9005)
   9005         Algebra            Yes             Yes
----------------------------------------------------------------

学生可以有多个额外的科目,但只有一个专业可以设置为“是”'值。现在我想找出他们所有的学生 在9002和9005以上的情况下选择了多个Major。

感谢。

2 个答案:

答案 0 :(得分:3)

只需使用聚合和HAVING

 select student_id
 from data
 where is_major = 'yes'
 group by student_id
 having count(*) > 1

答案 1 :(得分:0)

Radim的答案适用于选择student_id。如果你需要整行:

select student_id, subject_name
from (
    select *, count(*) over (partition by student_id) as major_count
    from data
    where is_major = 'yes'
) t;

当然,另一种方法是通过子查询结合Radim的答案:

select * from data
where student_id in (
    select student_id
    from data
    where is_major = 'Yes'
    group by student_id
    having count(*) > 1
);

我相信这些会产生不同的计划,所以你可能想要尝试它们。