sql >> Database >  >> RDS >> Sqlserver

Subquery's in SQL gebruiken om max(count()) te vinden

U hebt geen gecorreleerde subquery nodig voor wat u doet. Hier is een manier op basis van uw vraag:

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

Ik zou geneigd zijn om de subquery te verplaatsen naar de from clausule en gebruik subquery's:

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;

Dit zijn standaard SQL en zouden in beide systemen moeten werken. In de praktijk zou ik waarschijnlijk een manier vinden om top . te gebruiken of row_number() op SQL Server 2008.



  1. Hoe orakel TNSPING te doen met Java?

  2. Wanneer begon orakel top:select top te ondersteunen? p2_.PRODUCT_ID van PRODUCT?

  3. PHP:While-lus werkt niet na het aanpassen van SELECT voor preventie van SQL-injectie

  4. Hoe slechts één kolom van de sql-tabel per csv-bestand bij te werken?