sql >> Databasteknik >  >> RDS >> Oracle

SQL-gruppfunktion kapslade för djupt

Ett sätt att göra detta är genom att kapsla din fråga och sedan välja den första raden i utdata:

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

Notera att jag uppdaterade joinsyntaxen till den modernare versionen med on istället för where .

Om du vill ha alla minimivärden (och det finns fler än ett), då skulle jag använda analytiska funktioner. Det är en mycket liknande idé som din ursprungliga fråga:

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;

Prova detta istället för din ursprungliga fråga:

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

Förutom att fixa sammanfogningarna tog jag också bort alla referenser till course_section . Den här tabellen verkar inte användas (såvida den inte används för att filtrera resultat), och om du tar bort den implicerar frågorna.




  1. PHP PDO Syntaxfel eller åtkomstöverträdelse:1064 vid infogning

  2. Hårdkodad mysql-användare och lösenord i Node.js

  3. Python pandas to_sql 'lägg till'

  4. Hur gör man förfrågningarna i en lagrad procedur medvetna om vårtransaktionen?