不使用 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