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

Vælg række med maks. værdi i én kolonne

Der er en række tilgange:

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

ELLER

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)

ELLER

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

Selvom at bruge TOP 1 måske ikke er det, du leder efter, med de andre metoder, hvis der er 2 kontorer med det samme antal kunder, vil de begge blive returneret, mens TOP 1 kun vil returnere 1 af disse (sandsynligvis i rækkefølge efter kontornavn) . Hvis du nogensinde kun vil have 1 post, så er dette den bedste metode



  1. Sikkerhedskopiering af database i MySQL ved hjælp af C#

  2. Returner alle deaktiverede begrænsninger i SQL Server (T-SQL-eksempel)

  3. Præcisering på rownum

  4. Flytning af lat/længde-tekstkolonner til en kolonne af typen "punkt".