mysql - 将 Count 与 Count Distinct 和 Group By 一起使用

标签 mysql count subquery

我有两个表,一个用于 employees,其中包含 idnamecompany 列,另一个表用于对于调查结果,其中包含employee_idquestions_idanswer作为一名员工获得多个结果。

|---------------------|
| 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      |
|--------------------------------|

SQL Fiddle

有什么建议吗?

最佳答案

通过从employeesresultsLEFT 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

Demo on SQLFiddle

关于mysql - 将 Count 与 Count Distinct 和 Group By 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59729261/

相关文章:

Java > 8 stream 同时统计多个项目

Java/MySQL - 在 ResultSet 上进行选择

mysql - 从具有相同列的多个表中选择 sum()

mysql - 按两列 mysql 分组的列计数总和

mysql - 如何在 MySQL 中创建计数不为零的选择

sql - 如何在T-SQL中计算GROUP BY行

具有多个子选择的 MySQL SQL 选择查询

mysql - 有人可以帮我找到问题吗? MySQL/子查询

mysql - 针对这种情况运行查询的最佳方法是什么?

php - 使用 jquery、ajax 和 php ajax() 检查本地服务器上的用户名未连接