Sql 查找与Oracle中多个列值关联的列值
我在oracle中有一个具有非唯一列值的表。这些组合也是非唯一的。但特定顺序的关联必须是唯一的。我试过很多解决办法。问题是最接近的,但我需要在Oracle SQL中找到解决方案。下面是我的桌子Sql 查找与Oracle中多个列值关联的列值,sql,oracle,duplicates,Sql,Oracle,Duplicates,我在oracle中有一个具有非唯一列值的表。这些组合也是非唯一的。但特定顺序的关联必须是唯一的。我试过很多解决办法。问题是最接近的,但我需要在Oracle SQL中找到解决方案。下面是我的桌子 -------------------------------------------------- Teacher subject class_id --------------------------------------------------
--------------------------------------------------
Teacher subject class_id
--------------------------------------------------
Paul English 001
Paul English 002
Allen English 003
Sia Maths 134
John Computer 913
Jack Physics 341
Arlene Maths 001
-------------------------------------------------
查询应仅返回以下信息
English, Maths
i、 e与多个教师关联的科目。如果我理解正确,您希望科目有多个教师。这是一个带有having子句的简单聚合查询:
如果我理解正确的话,你需要有不止一位老师的科目。这是一个带有having子句的简单聚合查询:
也许你想要这样的东西:
select listagg (subject, ', ') within group (order by subject) subjects
from (
select subject from classes
group by subject
having count(teacher)>1
);
SUBJECTS
-------------------------
English, Maths
或者,您也可以使用分析函数获得相同的结果:
select listagg (subject, ', ') within group (order by subject) subjects
from (
select subject,
count(teacher) over (partition by subject) teachers,
row_number() over (partition by subject order by class_id) rn
from classes
)
where teachers>1 and rn=1
;
也许你想要这样的东西:
select listagg (subject, ', ') within group (order by subject) subjects
from (
select subject from classes
group by subject
having count(teacher)>1
);
SUBJECTS
-------------------------
English, Maths
或者,您也可以使用分析函数获得相同的结果:
select listagg (subject, ', ') within group (order by subject) subjects
from (
select subject,
count(teacher) over (partition by subject) teachers,
row_number() over (partition by subject order by class_id) rn
from classes
)
where teachers>1 and rn=1
;