sql >> Databasteknik >  >> RDS >> Sqlserver

Välj rad med maxvärde i en kolumn

Det finns ett antal tillvägagångssätt:

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

Även om användning av TOP 1 kanske inte är vad du är ute efter, med de andra metoderna, om det finns 2 kontor med samma antal kunder, kommer de båda att returneras, medan TOP 1 endast kommer att returnera 1 av dessa (förmodligen i ordning efter kontorsnamn) . Om du någonsin bara vill ha en post, är detta den bästa metoden



  1. Grader av separation fråga

  2. Är addslashes() tillräckligt säkert för att undvika SQL-INJEKTIONER?

  3. Få en PHP PDO-anslutning från en mysql_connect()?

  4. Exportera tabell från Postgres databas (på server) till csv-fil (på lokal) i java