sql >> Database >  >> RDS >> Oracle

SQL-groepsfunctie te diep genest

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.




  1. PDO - Ongeldig parameternummer

  2. Hoe u meer dan 1000 waarden in een Oracle IN-clausule plaatst?

  3. Hoe query postgre te optimaliseren

  4. Maandelijks actieve gebruikers (MAU) berekenen in MySQL