Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chọn hàng có giá trị tối đa trong một cột

Có một số cách tiếp cận:

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

HOẶC

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)

HOẶC

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

Mặc dù việc sử dụng TOP 1 có thể không phải là thứ bạn đang theo đuổi, nhưng với các phương pháp khác nếu có 2 văn phòng với cùng số lượng khách hàng thì cả hai văn phòng sẽ được trả về, trong khi TOP 1 sẽ chỉ trả về 1 trong số này (có thể theo thứ tự tên văn phòng) . Nếu bạn chỉ muốn có 1 bản ghi, thì đây là phương pháp tốt nhất



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Công việc SQL Server Agent - Xuất kết quả sang Tệp được phân cách bằng tab?

  2. Thủ tục được lưu trữ T-SQL để trả về kết quả tìm kiếm được đề xuất theo phong cách google

  3. Sử dụng SERVERPROPERTY () để nhận thông tin máy chủ trong SQL Server

  4. Áp dụng như trên tất cả các cột mà không chỉ định tất cả các tên cột?

  5. Thủ tục đã lưu trữ, phép nối bên trái cung cấp cho tôi các hàng trùng lặp, nhưng tôi muốn hàng trên cùng (1) cho mỗi bản ghi có cùng ID