作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三张表employee,promotion和punishment员工的表结构是这样的
Id int
Fullname varchar
...............
promotionDate date
Promotion的表结构是这样的 标识整数 emp_id 整型 datedate日期
惩罚的表结构是这样的
id int
emp_id int
direcotorateDate date
假设employee表有200条记录,每个月有一组员工升职(在职一年后),我想获取当月所有升职员工的列表我可以通过这个查询轻松获取列表
SELECT *
FROM employee
WHERE MONTH(promotionDate) = MONTH(CURRENT_DATE())
AND YEAR(promotionDate) = YEAR(CURRENT_DATE())
我的问题是我想分别从惩罚和晋升表中统计每个员工当年受到的惩罚和晋升的次数我做了这个查询,但没有得到正确的结果
SELECT e.fullname , COUNT(punish.emp_id) as siza ,COUNT(pro.emp_id) as supas
FROM emp_employee as e
LEFT JOIN emp_punishment as punish on punish.emp_id=e.id
LEFT JOIN emp_promotion as pro on e.id=pro.emp_id
WHERE ((MONTH(e.promotionDate) = MONTH(CURRENT_DATE())
AND YEAR(e.promotionDate) = YEAR(CURRENT_DATE()))
AND ( YEAR(punish.directorate_date) = YEAR(CURRENT_DATE()) )
AND ( YEAR(pro.directorate_date) = YEAR(CURRENT_DATE()) )
GROUP BY e.fullname;
请帮忙。
最佳答案
通过直接连接 3 个表,您会得到重复的行。按 emp_id
分组并分别聚合每个表 emp_punishment
和 emp_promotion
并将结果连接到表 emp_employee
。
select e.fullname, coalesce(pu.siza, 0) siza, coalesce(pr.supas, 0) supas
from emp_employee as e
left join (
select emp_id, count(*) siza
from emp_punishment
where year(directorate_date) = year(CURRENT_DATE)
group by emp_id
) pu on pu.emp_id = e.id
left join (
select emp_id, count(*) supas
from emp_promotion
where year(directorate_date) = year(CURRENT_DATE)
group by emp_id
) pr on pr.emp_id = e.id
我只用了条件:
where year(directorate_date) = year(CURRENT_DATE())
因为在你的问题中你说:
我想统计每个员工在 当年 从惩罚和晋升中受到的惩罚和晋升
关于mysql - Mysql中联合三张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020123/
我是一名优秀的程序员,十分优秀!