ऐसा करने का एक तरीका है अपनी क्वेरी को नेस्ट करना और फिर आउटपुट में पहली पंक्ति का चयन करना:
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
नोट मैंने जॉइन सिंटैक्स को on
. का उपयोग करके अधिक आधुनिक संस्करण में अपडेट किया है where
. के बजाय ।
अगर आप चाहते हैं सभी न्यूनतम मान (और एक से अधिक हैं), तो मैं विश्लेषणात्मक कार्यों का उपयोग करूंगा। यह आपकी मूल क्वेरी के समान ही है:
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;
अपनी मूल क्वेरी के बजाय इसे आज़माएं:
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)
);
जोड़ों को ठीक करने के अलावा, मैंने course_section
. के सभी संदर्भ भी हटा दिए हैं . ऐसा लगता है कि इस तालिका का उपयोग नहीं किया जा रहा है (जब तक कि परिणामों को फ़िल्टर करने के लिए नहीं), और इसे हटाने से प्रश्नों का अर्थ होता है।