我正在一个HR项目中,我需要从mysql数据库中调用3个表值,并且需要基于以下一些条件的自定义输出:但是我找不到想要的输出。我是mysql新手,需要您的指导以获取如下输出。预先感谢您的明智建议...
表员工
EMP_ID-EMP_NAME
EID001-TOM
EID002-拉里
表出席率
EMP_ID-EMP_NAME-ATTENDANCE_DATE
EID001-TOM-20200101
EID002-拉里-20200101
EID001-TOM-20200102
EID002-TOM-20200103
EID002-TOM-20200104
表离开记录
EMP_ID-EMP_NAME-LEAVE_DATE(FROM)-LEAVE_DATE(TO)-天-LEAVE_TYPE
EID002-拉里-20200102-20200102-1-普通
EID002-拉里-20200103-20200103-1-病
EID002-拉里-20200104-20200104-1-年度
查找输出
EMP_ID-EMP_NAME-WORKING_DAYS-CASUAL_LEAVE-SICK_LEAVE-ANNUAL_LEAVE
EID001 -TOM-4-0-0-0
EID002-拉里-4-1-1-1
MySql查询:SELECT EMP_ID, EMP_Name, SUM(Attendance. ATTENDANCE_DATE!='') as WORKING_DAYS, SUM(Leave_Record.LEAVE_TYPE='CASUAL') as CASUAL, SUM(Leave_Record.LEAVE_TYPE=SICK) as SICK , SUM(Leave_Record.LEAVE_TYPE=ANNUAL) as ANNUAL from Employee, Attendance, Leave_Record where Attendance. EMP_ID = Employee. EMP_ID AND Employee. EMP_ID = Leave_Record. EMP_ID GROUP BY Employee. EMP_ID order by Employee. EMP_ID
两个表中都有多个匹配的行,因此外部聚合将产生错误的计数。通常,您通常会先在子查询中聚合,然后再加入外部查询:
select e.emp_id, e.name, a.working_days, a.casual_leave, a.sick_leave
from employee e
left join (
select emp_id, count(*) working_days from attendance group by emp_id
) a on a.emp_id = e.emp_id
left join (
select
emp_id,
sum(case when leave_type = 'casual' then days end) casual_leave,
sum(case when leave_type = 'sick' then days end) sick_leave
from leave_record
group by emp_id
) cl on cl.emp_id = e.emp_id