Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisation de sous-requêtes en SQL pour trouver max(count())

Vous n'avez pas besoin d'une sous-requête corrélée pour ce que vous faites. Voici une méthode basée sur votre requête :

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

Je serais enclin à déplacer la sous-requête vers le from clause et utiliser des sous-requêtes :

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;

Il s'agit de SQL standard et devraient fonctionner dans les deux systèmes. En pratique, je trouverais probablement un moyen d'utiliser top ou row_number() sur SQL Server 2008.