Использование Count с Count Distinct и Group By - PullRequest
0 голосов
/ 14 января 2020

У меня есть две таблицы, одна для employees, в которой есть столбцы id, name и company, и другая таблица для опроса results, в которой 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

Результат

|--------------------------------|
|  x | Total Surveys | Headcount |
|--------------------------------|
| C1 |       15      |    3      |
| C2 |       10      |    5      |
|--------------------------------|

SQL Fiddle

Любые рекомендации?

1 Ответ

1 голос
/ 14 января 2020

Вы можете получить желаемые результаты на 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

Демонстрация по SQLFiddle

...