sql >> Database teknologi >  >> RDS >> Sqlserver

Brug af underforespørgsler i SQL til at finde max(count())

Du behøver ikke en korreleret underforespørgsel til det, du laver. Her er en måde baseret på din forespørgsel:

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

Jeg ville være tilbøjelig til at flytte underforespørgslen til from klausul og brug underforespørgsler:

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;

Disse er standard SQL og bør fungere i begge systemer. I praksis ville jeg nok finde en måde at bruge top på eller row_number() på SQL Server 2008.



  1. Data bliver udfyldt fra en bestemt tabels dato i stedet for alle tabeller i sqlite

  2. Er det muligt at angive skemaet, når der oprettes forbindelse til postgres med JDBC?

  3. PostgreSQL:RÆKKE MELLEM INTERVAL '10 DAGE' OG AKTUELT RÆKKE

  4. Forskellen mellem numerisk, float og decimal i SQL Server