В TSQL, как упорядочить по «наиболее встречающимся» значениям?

#sql-server #tsql

#sql-server #tsql

Вопрос:

Используя 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 
  ??
  

Комментарии:

1. Некоторые менеджеры управляют менеджерами?

Ответ №1:

Предполагая, что вы используете по крайней мере SQL Server 2005, вы можете использовать

 ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID)  DESC
  

Хотя я полагаю

 ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC,  Manager.LoginID
  

возможно, было бы лучше избегать потенциального смешивания строк результатов для менеджеров с привязанным количеством подчиненных.

Комментарии:

1. Идеально, именно то, что я искал.