Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie podzapytań w SQL do znalezienia max(count())

Nie potrzebujesz skorelowanego podzapytania dla tego, co robisz. Oto jeden ze sposobów na podstawie Twojego zapytania:

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

Byłbym skłonny przenieść podzapytanie do from klauzula i użyj podzapytań:

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;

Są to standardowe SQL i powinny działać w obu systemach. W praktyce prawdopodobnie znalazłbym sposób na użycie top lub row_number() na SQL Server 2008.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak są przechowywane wartości varchar w bazie danych SQL Server?

  2. Metadane SQL Server w technologii Intellisense?

  3. Jak tworzyć dokumenty (docx lub pdf) z SQL Server?

  4. Jak mogę WYBRAĆ wiele kolumn w ramach przypadku, gdy na serwerze SQL Server?

  5. Zapytanie SQL Server z IN (NULL) nie działa