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.