Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando subconsultas no SQL para encontrar max(count())


Você não precisa de uma subconsulta correlacionada para o que está fazendo. Aqui está uma maneira com base na sua consulta:
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
                            );

Eu estaria inclinado a mover a subconsulta para o from cláusula e use subconsultas:
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;

Estes são SQL padrão e devem funcionar em ambos os sistemas. Na prática, eu provavelmente encontraria uma maneira de usar top ou row_number() no SQL Server 2008.