我在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。
感谢。
答案 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
);
我相信这些会产生不同的计划,所以你可能想要尝试它们。