sql >> Databáze >  >> RDS >> Sqlserver

Vyberte řádek s maximální hodnotou v jednom sloupci

Existuje několik přístupů:

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

NEBO

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)

NEBO

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

Ačkoli použití TOP 1 nemusí být to, co hledáte, u ostatních metod, pokud jsou 2 kanceláře se stejným počtem zákazníků, budou vráceny obě, zatímco TOP 1 vrátí pouze 1 z nich (pravděpodobně v pořadí podle názvu kanceláře) . Pokud chcete pouze 1 záznam, pak je to nejlepší metoda



  1. SQL Server - definování sloupce typu XML s kódováním UTF-8

  2. Jak vytvářet a mazat databáze a tabulky v PostgreSQL

  3. Vkládání dat pole formulářů do MySQL pomocí PHP

  4. Počítejte odlišně za fiskální rok a zobrazte všechna data ve výsledku dotazu