【发布时间】:2021-04-26 05:59:44
【问题描述】:
员工表
dept_emp 表
SELECT
COUNT(de.emp_no) AS num_of_employees,
e.gender AS gender,
YEAR(de.from_date) AS year
FROM employees e
JOIN dept_emp de
USING (emp_no)
GROUP BY gender, year
ORDER BY year
使用这段代码,我可以得到以下查询结果
失败的结果
我在这里解决的问题是能够按性别排序每年雇用的员工人数。
我要解决的问题是: 有多少男性和女性在整个公司工作过,显示该年每年活跃员工的总数。
但是,问题是我无法获得每年当前在职的在职员工和性别,因为我使用的是 from_date 列,因此没有考虑离职/失业的人来自 dept_emp 表中的 to_date 列。
我昨天和今天花了 10 个小时试图弄清楚这一点。我使用的其他一些代码在这里,但没有运气。把这个放在这里,以防我错过了什么等等。
SET @total := 0;
SELECT
gender,
year,
hired_employees,
@total := @total + hired_employees AS currently_employed
FROM
(SELECT
COUNT(de.emp_no) AS hired_employees,
e.gender AS gender,
YEAR(de.from_date) AS year
FROM dept_emp de
JOIN employees e
USING (emp_no)
WHERE gender = "M"
GROUP BY gender, year
ORDER BY gender, year) AS male_employees
我在这里得到了总和,在这种情况下是所有男性员工,但不能在 where 子句中添加 AND 性别 = "F",因为总和不是与每个性别分开的。在此代码中每年也无法区分活跃和不活跃的员工。
非常感谢任何帮助。
【问题讨论】:
-
您使用的是 MySQL 8.x 吗?然后您可以使用窗口函数来获取每个分区中的运行总计。
-
使用最新版本,over 子句没有运气。
标签: mysql