如何获得类别的最大数量?

时间:2015-11-29 00:10:42

标签: sql sql-server

我有2个表,用于保存Empolyee和Office数据:

  • EMPLOYEE (EmpID, Role, OfficeNumber)
  • OFFICE (OfficeNumber, Region, Manager)

员工可以在多个不同职位的办事处注册。

例如,下面的员工在2个办事处(20& 50)注册,但在办公室20有更多的条目,所以我们想选择那个作为他的“家庭”办公室

EmpID | Role | Region | Manager | OfficeNumber

15    | 1    | East   | James   | 20
15    | 4    | East   | James   | 20
15    | 5    | East   | James   | 20
15    | 1    | West   | George  | 50
15    | 5    | West   | George  | 50

基本上我想知道该员工在该地区注册的办公室最多,然后返回该办公室的经理。

因此,对于上述员工,他们的“内政部”的结果将是:

EmpID | Region | Manager | OfficeNumber
15    | East   | James   | 20

这是我放在一起的SQL。

SELECT 
    EmpID, Manager, Region,
    Count (OfficeNumber),
    Row_Number(Partition by EmpID ORDER by   
    Count(OfficeNumber) Desc)
FROM 
Employees e
JOIN 
Offices o ON e.OfficeNumber = o.OfficeNumber

不确定我是否正确使用Row_Number函数或是否有更好的方法?

1 个答案:

答案 0 :(得分:0)

两个CTE可以完成这项工作。第一个创建每个Employee / Office的计数,第二个获得每个Employee的主办公室。希望它有效4你

with CountCte as (
SELECT *,count(*) over (partition by [EmpID],[OfficeNumber]) OfficeCount
FROM 
Employees e
JOIN 
Offices o ON e.OfficeNumber = o.OfficeNumber),
MainCte as (
select  *,row_number() over (partition by [EmpID] order by OfficeCount desc) r
from    CountCte)
select  EmpID
        ,Region
        ,Manager
        ,OfficeNUmber
from    MainCte
where r = 1