我在 sql server 中有 2 个表:
员工(职位、聘用日期)
我需要返回 E.JobTitle、E.HireDate、P.FirstName、P.LastName 以及有多少员工拥有相同的职位。
所以我使用了这个查询:
SELECT E.JobTitle,
E.HireDate,
P.FirstName,
P.LastName,
COUNT(E.JobTitle)
FROM AdventureWorks2019.HumanResources.Employee E
JOIN AdventureWorks2019.Person.Person P ON E.BusinessEntityID = P.BusinessEntityID
GROUP BY E.JobTitle,
E.HireDate,
P.FirstName,
P.LastName;
问题是查询每次计数返回 1,而我希望每行获得具有该职位的员 worker 数的计数。我的问题是如何获得正确的计数?
最佳答案
As mentioned by @Larnu in the comments ,您的问题是您按 LastName
分组此外,因此您将获得每个 LastName
的计数 1 .
您需要使用 OVER
的窗口计数,不是与 GROUP BY
的聚合
不需要额外的连接或分组。
SELECT E.JobTitle,
E.HireDate,
P.FirstName,
P.LastName,
COUNT(*) OVER (PARTITION BY E.JobTitle)
FROM AdventureWorks2019.HumanResources.Employee E
JOIN AdventureWorks2019.Person.Person P ON E.BusinessEntityID = P.BusinessEntityID;
关于sql-server - 错误的计数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68441347/