在TSQL中,如何按"最常出现"值排序?

Rob*_*b G 5 t-sql sql-server

例如,使用AdventureWorks,我希望获得所有员工及其经理的列表,其中管理者的下级最多.通过使用GROUP BY可以很容易地获得每个经理所拥有的报告数量,但我想要在不同的行上实际列出他们的下属.

SELECT
  Subordinate.LoginID, Subordinate.Title, Manager.LoginID, Manager.Title
FROM
  HumanResources.Employee Subordinate
  JOIN HumanResources.Employee Manager
    ON Subordinate.ManagerID = Manager.EmployeeID
ORDER BY 
  ??
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 3

假设您至少使用 SQL Server 2005,您可以使用

ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID)  DESC
Run Code Online (Sandbox Code Playgroud)

虽然我想

ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC,  Manager.LoginID
Run Code Online (Sandbox Code Playgroud)

可能最好避免将下属数量有限的经理的结果行混合在一起。