【问题标题】:How to show the total number of employees and participants, and participation percentage in all departments?如何显示员工和参与者的总数,以及所有部门的参与百分比?
【发布时间】:2012-05-17 15:58:49
【问题描述】:

我有以下数据库设计:

Employees Table: EmployeeID, Name, OrgCode
Departments Table: OrgCode, DepartName
CompleteSurvey Table: ID, ParticipantID

我需要开发一个查询,该查询将显示一个表格,该表格显示所有部门的员工总数以及所有部门完成调查的参与者总数。

我可以通过以下查询找到所有部门的员工总数:

SELECT     COUNT(DISTINCT dbo.Employees.EmployeeID) AS [Total Number of Employees]
FROM         dbo.Departments INNER JOIN
                      dbo.Employees ON dbo.Departments.OrgCode = dbo.Employees.OrgCode CROSS JOIN
                      dbo.CompleteSurvey

然后,我可以通过以下查询找到所有部门的参与者总数:

SELECT     COUNT(DISTINCT dbo.CompleteSurvey.ID) AS [Total Number of Participants]
FROM         dbo.Departments INNER JOIN
                      dbo.Employees ON dbo.Departments.OrgCode = dbo.Employees.OrgCode INNER JOIN
                      dbo.CompleteSurvey ON dbo.Employees.EmployeeID = dbo.CompleteSurvey.RespondantID

但我应该只有一个查询。

例如,如果 A 部门有 100 名员工,参与人数为 100 人中有 50 人 B部有80名员工,参加人数为30人

查询应显示以下内容:

所有部门员工总数=180

所有部门的参与者总数 = 80

全部完成百分比 = 80/180 = 44%

那该怎么做呢?

【问题讨论】:

标签: sql database sql-server-2008-r2


【解决方案1】:

我不了解 SQL Server,希望 Oracle 解决方案也能提供帮助:

select e.employees, c.respondents, (c.respondents / e.employees) * 100 percentage
  from (select count(*) employees from employees) e,
       (select count(*) respondents from complete_survey) c

【讨论】:

  • 您计算的是回复,而不是参与者(同一个人可以回答多个调查),但无论如何 +1,这很容易纠正。 MS SQL 在这种情况下仅区分大小写(=> from Employeesfrom CompleteSurvey
【解决方案2】:

您不需要在这些计算中涉及Department 表:

SELECT
  TotalEmployees          = COUNT(*),
  TotalParticipants       = COUNT(s.ParticipantID),
  ParticipationPercentage = COUNT(s.ParticipantID) * 100.0 / COUNT(*)
FROM dbo.Employee e
  LEFT JOIN (SELECT DISTINCT ParticipantID FROM dbo.CompleteSurvey) s
    ON e.EmployeeID = s.ParticipantID

【讨论】:

  • 感谢您的帮助。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多