sql >> Database >  >> RDS >> Sqlserver

Selecteer rij met maximale waarde in één kolom

Er zijn een aantal benaderingen:

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

OF

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)

OF

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

Hoewel het gebruik van TOP 1 misschien niet is wat u zoekt, met de andere methoden, als er 2 kantoren zijn met hetzelfde aantal klanten, zullen ze beide worden geretourneerd, terwijl TOP 1 hiervan slechts 1 retourneert (waarschijnlijk in volgorde van kantoornaam) . Als je maar 1 record wilt, dan is dit de beste methode



  1. Amazon Python 2.7 Lambda:DPI-1047:64-bit Oracle Client-bibliotheek kan niet worden geladen:libclntsh.so

  2. Hoe kan ik kolommen afzonderlijk tellen en groeperen met MySQL?

  3. Hoe kan ik waarden in de database (mySql) invoegen met behulp van het cpp-programma?

  4. IW en MM gebruiken in Oracle