我有两个表,一个表用于employees
,其中有id
,name
和company
列,另一个表是用于调查的results
,具有{{1 }},employee_id
,questions_id
作为一名员工获得许多成果。
answer
我想|---------------------|
| id | name | company |
|---------------------|
|-----------------------------------------|
| id | employee_id | question_id | answer |
|-----------------------------------------|
列出每个公司的员工总数,以及调查中每个公司的参与者总数。
我尝试了以下查询,但是执行时间太长:
Select
结果
SELECT employees.company as x, COUNT(DISTINCT (results.employee_id)) "Total Surveys", (SELECT COUNT(employees.id) FROM employees WHERE company = x) "Headcount"
FROM results
JOIN employees ON results.employee_id = employees.id
GROUP BY employees.company
有什么建议吗?
答案 0 :(得分:1)
您可以通过LEFT JOIN
从employees
到results
获得所需的结果;那么您可以在没有子查询的情况下计算两个值:
SELECT e.company,
COUNT(DISTINCT r.employee_id) AS `Total Surveys`,
COUNT(DISTINCT e.id) AS `HeadCount`
FROM employees e
LEFT JOIN results r ON r.employee_id = e.id
GROUP BY e.company