Een manier om dit te doen is door uw zoekopdracht te nesten en vervolgens de eerste rij in de uitvoer te kiezen:
select C_SE_ID, cnt
from (select CS.C_SE_ID, count(*) as cnt
from COURSE_SECTION CS join
ENROLLMENT E
on CS.C_SE_ID=E.C_SE_ID join
LOCATION L
on CS.LOC_ID=L.LOC_ID
where L.BLDG_CODE='DBW'
GROUP BY CS.C_SE_ID
order by count(*) desc
) t
where rownum = 1
Opmerking Ik heb de syntaxis voor joins bijgewerkt naar de modernere versie met behulp van on
in plaats van where
.
Als je alles wilt minimumwaarden (en er zijn er meer dan één), dan zou ik analytische functies gebruiken. Het is een idee dat erg lijkt op uw oorspronkelijke vraag:
select *
from (select CS.C_SE_ID, count(*) as cnt,
max(count(*)) over (partition by cs.c_se_id) as maxcnt
from COURSE_SECTION CS join
ENROLLMENT E
on CS.C_SE_ID=E.C_SE_ID join
LOCATION L
on CS.LOC_ID=L.LOC_ID
where L.BLDG_CODE='DBW'
GROUP BY CS.C_SE_ID
order by count(*) desc
) t
where cnt = maxcnt;
Probeer dit in plaats van uw oorspronkelijke zoekopdracht:
SELECT E.S_ID
FROM ENROLLMENT E
where E.C_SE_ID in (select C_SE_ID
from (select CS.C_SE_ID, count(*) as cnt,
max(count(*)) over (partition by cs.c_se_id) as maxcnt
from ENROLLMENT E
LOCATION L
on CS.LOC_ID=L.LOC_ID
where L.BLDG_CODE='DBW'
GROUP BY e.C_SE_ID
) t
where cnt = maxcnt)
);
Naast het repareren van de joins, heb ik ook alle verwijzingen naar course_section
. verwijderd . Deze tabel lijkt niet te worden gebruikt (tenzij voor het filteren van resultaten) en het verwijderen ervan impliceert de zoekopdrachten.