sql-server - 错误的计数结果

标签 sql-server count

我在 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/

    相关文章:

    mysql - SQL 数计数

    sql - 错误 : SubQuery returns more than one records

    sql-server - 优势数据库或 SQL Server

    c# - "Failed to convert parameter value from int64 to int32"

    sql - 如何在不使用sql循环的情况下过滤日期之间的行

    mysql - 我想要一个从我的数据库中删除重复条目的查询

    C# 计算列表中的出现次数

    sql - UNION 多个存储过程的结果

    sql - 选择行数,按 PostgreSQL 中时间间隔的动态范围排序

    java - 如何从 Hashmap Java 计算总数