不使用 group by 的 count() 结果
count() results without using group by
我正在尝试与此页面上的上一个示例(使用 GROUP BY)非常相似的操作:
https://thecodedeveloper.com/mysql-count-function/
参考以下table的数据:
id name salary department
1 Tom 4000 Technology
2 Sam 6000 Sales
3 Bob 3000 Technology
4 Alan 8000 Technology
5 Jack 12000 Marketing
以下查询:
SELECT department, COUNT(*) AS "Number of employees"
FROM employees
GROUP BY department;
将产生以下输出:
department Number of employees
Marketing 1
Sales 1
Technology 3
除了我想查看每个部门的员工数量以及 table 中的每个用户。
所以我希望输出看起来像这样:
id name salary department employees per department
1 Tom 4000 Technology 3
2 Sam 6000 Sales 1
3 Bob 3000 Technology 3
4 Alan 8000 Technology 3
5 Jack 12000 Marketing 1
我已经成功地使用第二个查询来测试第一个查询的每个结果,但它非常慢,我相信有一种更快的方法可以在单个查询中完成。
这是一个 window 计数。在 MySQL 8.0:
select e.*, count(*) over(partition by d.department) as number_of_employees
from employees e
在早期版本中,替代方法使用相关子查询:
select e.*,
(select count(*) from employees e1 where e1.department = e.department) as number_of_employees
from employees e
我正在尝试与此页面上的上一个示例(使用 GROUP BY)非常相似的操作: https://thecodedeveloper.com/mysql-count-function/
参考以下table的数据:
id name salary department
1 Tom 4000 Technology
2 Sam 6000 Sales
3 Bob 3000 Technology
4 Alan 8000 Technology
5 Jack 12000 Marketing
以下查询:
SELECT department, COUNT(*) AS "Number of employees"
FROM employees
GROUP BY department;
将产生以下输出:
department Number of employees
Marketing 1
Sales 1
Technology 3
除了我想查看每个部门的员工数量以及 table 中的每个用户。
所以我希望输出看起来像这样:
id name salary department employees per department
1 Tom 4000 Technology 3
2 Sam 6000 Sales 1
3 Bob 3000 Technology 3
4 Alan 8000 Technology 3
5 Jack 12000 Marketing 1
我已经成功地使用第二个查询来测试第一个查询的每个结果,但它非常慢,我相信有一种更快的方法可以在单个查询中完成。
这是一个 window 计数。在 MySQL 8.0:
select e.*, count(*) over(partition by d.department) as number_of_employees
from employees e
在早期版本中,替代方法使用相关子查询:
select e.*,
(select count(*) from employees e1 where e1.department = e.department) as number_of_employees
from employees e