Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden von Unterabfragen in SQL, um max(count()) zu finden

Sie brauchen keine korrelierte Unterabfrage für das, was Sie tun. Hier ist eine Möglichkeit basierend auf Ihrer Anfrage:

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

Ich wäre geneigt, die Unterabfrage in den from zu verschieben -Klausel und verwenden Sie Unterabfragen:

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;

Dies sind Standard-SQL und sollten in beiden Systemen funktionieren. In der Praxis würde ich wahrscheinlich einen Weg finden, top zu verwenden oder row_number() auf SQL Server 2008.