我有两个表,一个用于 employees
,其中包含 id
、name
和 company
列,另一个表用于对于调查结果
,其中包含employee_id
、questions_id
、answer
作为一名员工获得多个结果。
|---------------------|
| id | name | company |
|---------------------|
|-----------------------------------------|
| id | employee_id | question_id | answer |
|-----------------------------------------|
我想选择
每家公司的员工总数以及每家公司参与调查的参与者总数。
我尝试了以下查询,但执行时间太长:
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
结果
|--------------------------------|
| x | Total Surveys | Headcount |
|--------------------------------|
| C1 | 15 | 3 |
| C2 | 10 | 5 |
|--------------------------------|
有什么建议吗?
最佳答案
通过从employees
到results
的LEFT JOIN
可以得到你想要的结果;那么您可以在不使用子查询的情况下计算这两个值:
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
关于mysql - 将 Count 与 Count Distinct 和 Group By 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59729261/