sql >> Database teknologi >  >> RDS >> Oracle

SQL-gruppefunktion indlejret for dybt

En måde at gøre dette på er ved at indlejre din forespørgsel og derefter vælge den første række i outputtet:

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

Bemærk, at jeg opdaterede joinsyntaksen til den mere moderne version ved hjælp af on i stedet for where .

Hvis du vil have alle minimumsværdier (og der er mere end én), så ville jeg bruge analytiske funktioner. Det minder meget om din oprindelige forespørgsel:

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;

Prøv dette i stedet for din oprindelige forespørgsel:

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

Udover at rette sammenføjningerne, fjernede jeg også alle referencer til course_section . Denne tabel ser ikke ud til at blive brugt (medmindre til filtrering af resultater), og fjernelse af den implicerer forespørgslerne.




  1. MySQL:Forespørgsel efter liste over tilgængelige muligheder for SET

  2. Find nærmeste matchende strenge og dens understrenge ved hjælp af SQL-forespørgsel

  3. Konverter kommasepareret kolonneværdi til rækker

  4. Mysql-opdateringskolonne ved første forekomst af hvert brugernavn