sql >> Databáze >  >> RDS >> Oracle

Funkce skupiny SQL je vnořena příliš hluboko

Jedním ze způsobů, jak toho dosáhnout, je vnořit dotaz a poté vybrat první řádek ve výstupu:

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

Poznámka:Aktualizoval jsem syntaxi spojení na modernější verzi pomocí on místo where .

Pokud chcete všechny minimální hodnoty (a je jich více), pak bych použil analytické funkce. Je to velmi podobný nápad jako váš původní dotaz:

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;

Zkuste toto místo původního dotazu:

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)
                   );

Kromě opravy spojení jsem také odstranil všechny odkazy na course_section . Zdá se, že tato tabulka není používána (s výjimkou filtrování výsledků) a její odstranění zjednodušuje dotazy.




  1. Chart.js - Získávání dat z databáze pomocí mysql a php

  2. Najděte překrývající se řádky (datum/čas) v jedné tabulce

  3. jak mohu aktualizovat 100 nejlepších záznamů na serveru SQL

  4. Zobrazit výsledky dotazu SQL v php