Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изберете ред с максимална стойност в една колона

Има няколко подхода:

SELECT  OfficeName, Total
FROM    (   SELECT  o.OfficeName, c.Total, MAX(Total) OVER() [MaxTotal]
            FROM    Offices o
                    LEFT JOIN
                    (   SELECT  OfficeID, COUNT(*) Total
                        FROM    Customers
                        GROUP BY OfficeID
                    ) c 
                        ON o.OfficeID = c.OfficeID
            WHERE   o.ClusterID = 29
        ) c
WHERE   Total = MaxTotal

ИЛИ

WITH CTE AS
(   SELECT  o.OfficeName, c.Total
    FROM    Offices o
            LEFT JOIN
            (   SELECT  OfficeID, COUNT(*) Total
                FROM    Customers
                GROUP BY OfficeID
            ) c 
                ON o.OfficeID = c.OfficeID
    WHERE   o.ClusterID = 29
)
SELECT  *
FROM    CTE
WHERE   Total = (SELECT MAX(Total) FROM CTE)

ИЛИ

SELECT  TOP 1 o.OfficeName, c.Total
FROM    Offices o
        LEFT JOIN
        (   SELECT  OfficeID, COUNT(*) Total
            FROM    Customers
            GROUP BY OfficeID
        ) c 
            ON o.OfficeID = c.OfficeID
WHERE   o.ClusterID = 29
ORDER BY Total DESC

Въпреки че използването на TOP 1 може да не е това, което търсите, с другите методи, ако има 2 офиса с еднакъв брой клиенти, и двата ще бъдат върнати, докато TOP 1 ще върне само 1 от тях (вероятно по реда на името на офиса) . Ако искате само 1 запис, тогава това е най-добрият метод



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е DTU в Azure SQL база данни и как да разберем колко ни трябва

  2. Актуализирайте само времето от моето поле Datetime в sql

  3. Всички ли мигрират към облака?

  4. SQL Server:как да изберете контакти от първа, втора и трета степен

  5. datetime2 срещу smalldatetime в SQL Server:Каква е разликата?