Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

SQL समूह फ़ंक्शन बहुत गहराई से नेस्टेड है

ऐसा करने का एक तरीका है अपनी क्वेरी को नेस्ट करना और फिर आउटपुट में पहली पंक्ति का चयन करना:

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 . के सभी संदर्भ भी हटा दिए हैं . ऐसा लगता है कि इस तालिका का उपयोग नहीं किया जा रहा है (जब तक कि परिणामों को फ़िल्टर करने के लिए नहीं), और इसे हटाने से प्रश्नों का अर्थ होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ODP.Net विद एंटिटी फ्रेमवर्क 6 - ORA-00955 ऑन सेलेक्ट फ्रॉम टेबल व्यू

  2. एक मेज पर एकाधिक विभाजन?

  3. तालिका को छोड़ने और पुनर्निर्माण किए बिना ऑरैकल में किसी विशिष्ट स्थिति में कॉलम कैसे सम्मिलित करें?

  4. ऑरैकल डेटाबेस व्यू के लिए एक टिप्पणी कैसे बनाएं

  5. स्कीमा नाम निर्दिष्ट किए बिना तालिका तक पहुंचना