sql >> Databasteknik >  >> RDS >> Sqlserver

Använda underfrågor i SQL för att hitta max(count())

Du behöver inte en korrelerad underfråga för det du gör. Här är ett sätt baserat på din fråga:

select CustomerNum, count(CustomerNum)
from Rentals R
group by CustomerNum
having count(CustomerNum) = (select max(cnt)
                             from (select CustomerNum, count(CustomerNum) as cnt
                                   from Rentals
                                   group by CustomerNum
                                  ) rc
                            );

Jag skulle vara benägen att flytta underfrågan till from klausul och använd underfrågor:

select rc.*
from (select CustomerNum, count(CustomerNum) as cnt
      from Rentals R
      group by CustomerNum
     ) rc join
     (select max(cnt) as maxcnt
      from (select CustomerNum, count(CustomerNum) as cnt
            from Rentals
            group by CustomerNum
           ) rc
     ) m
     on rc.cnt = m.maxcnt;

Dessa är standard SQL och bör fungera i båda systemen. I praktiken skulle jag förmodligen hitta ett sätt att använda top eller row_number() på SQL Server 2008.



  1. Pgadmin laddas inte

  2. Kan inte starta Mysql på Mac

  3. Postgres:Ordna efter strängkolumn med kända värden

  4. Få ett objekts ID från dess namn i SQL Server:OBJECT_ID()