SQL COUNT(DISTINCT)统计异常:职位头衔计数始终为1的问题
解决职位头衔统计结果始终为1的问题
问题原因
你的查询中GROUP BY子句包含了p.FirstName、p.LastName、e.JobTitle、e.HireDate,这意味着每个员工的信息(姓名、入职日期+职位)会被分成单独的分组,每个分组里只有一条数据,所以count(distinct e.JobTitle)必然返回1。
解决方案
根据你的需求不同,有两种处理方式:
1. 统计每个职位头衔的总人数
如果目标是知道每个职位对应多少员工,只需按JobTitle分组即可:
use [AdventureWorks2019] select e.JobTitle, count(e.BusinessEntityID) 'CountOfEmployees' from HumanResources.Employee e left join person.Person p on e.BusinessEntityID = p.BusinessEntityID group by e.JobTitle
2. 显示员工明细的同时展示对应职位的总人数
如果需要保留每个员工的姓名、入职日期等信息,同时在每行显示该职位的总人数,用窗口函数替代GROUP BY:
use [AdventureWorks2019] select p.FirstName, p.LastName, e.JobTitle, e.HireDate, count(e.BusinessEntityID) over (partition by e.JobTitle) 'CountOfTitle' from HumanResources.Employee e left join person.Person p on e.BusinessEntityID = p.BusinessEntityID
内容的提问来源于stack exchange,提问作者Itzik Osher
相关产品推荐
相关产品推荐

