Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz wiersz z maksymalną wartością w jednej kolumnie

Istnieje kilka podejść:

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

LUB

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)

LUB

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

Chociaż korzystanie z TOP 1 może nie być tym, czego szukasz, w przypadku innych metod, jeśli są 2 biura z taką samą liczbą klientów, oba zostaną zwrócone, podczas gdy TOP 1 zwróci tylko 1 z nich (prawdopodobnie w kolejności nazwy biura) . Jeśli potrzebujesz tylko 1 rekordu, to jest to najlepsza metoda



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie nazw tabel będących zastrzeżonymi słowami/słowami kluczowymi w MS SQL Server

  2. Generuj ciąg skrótu MD5 za pomocą T-SQL

  3. Znajdź wszystkie instancje SQL Server w sieci lokalnej

  4. Jaki jest najlepszy sposób na zbiorcze wstawianie bazy danych z c#?

  5. Wyzwalacz SQL Server:zrozumienie i alternatywy