Sql 查找与Oracle中多个列值关联的列值

Sql 查找与Oracle中多个列值关联的列值,sql,oracle,duplicates,Sql,Oracle,Duplicates,我在oracle中有一个具有非唯一列值的表。这些组合也是非唯一的。但特定顺序的关联必须是唯一的。我试过很多解决办法。问题是最接近的,但我需要在Oracle SQL中找到解决方案。下面是我的桌子 -------------------------------------------------- Teacher subject class_id --------------------------------------------------

我在oracle中有一个具有非唯一列值的表。这些组合也是非唯一的。但特定顺序的关联必须是唯一的。我试过很多解决办法。问题是最接近的,但我需要在Oracle SQL中找到解决方案。下面是我的桌子

--------------------------------------------------
  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
;