Pour ce faire, vous pouvez imbriquer votre requête, puis choisir la première ligne du résultat :
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
Notez que j'ai mis à jour la syntaxe de jointure vers la version plus moderne en utilisant on
au lieu de where
.
Si vous voulez tout valeurs minimales (et il y en a plus d'une), alors j'utiliserais des fonctions analytiques. C'est une idée très similaire à votre requête d'origine :
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;
Essayez ceci au lieu de votre requête d'origine :
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)
);
En plus de corriger les jointures, j'ai également supprimé toutes les références à course_section
. Ce tableau ne semble pas être utilisé (sauf pour filtrer les résultats), et le supprimer simplifie les requêtes.