用于对mysql中不同表中的不同列求和的查询

用于对mysql中不同表中的不同列求和的查询,mysql,sum,left-join,inner-join,Mysql,Sum,Left Join,Inner Join,我有三个表,我试图将它们连接起来,从两个表中获取它们的总和,然后将两个表中的总和相加 这里我有一个用于查询结构的SQL FIDLE: 我希望输出如下所示: emp_id firstname middlename lastname name_ext SUM(amount_paid) SUM(salary_paid) SUM(total) 1 test test test test 300

我有三个表,我试图将它们连接起来,从两个表中获取它们的总和,然后将两个表中的总和相加

这里我有一个用于查询结构的SQL FIDLE:

我希望输出如下所示:

emp_id   firstname  middlename  lastname    name_ext    SUM(amount_paid)    SUM(salary_paid) SUM(total) 

  1        test        test        test        test          300                  500             800

无需子查询,只需对值进行求和即可,并按tbl\u用户分组

SELECT DISTINCT tbl_user.firstname,
tbl_user.middlename,
tbl_user.lastname,
tbl_user.name_ext,
sum(coalesce(tbl_overtime.amount_paid,0)),
sum(coalesce(tbl_salary.salary_paid,0)),
sum(coalesce(tbl_salary.salary_paid,0)+coalesce(tbl_overtime.amount_paid,0))
FROM tbl_user
INNER JOIN tbl_salary ON tbl_user.employee_id = tbl_salary.employee_id
LEFT JOIN tbl_overtime ON tbl_overtime.employee_id = tbl_salary.employee_id
GROUP BY tbl_user.firstname,
tbl_user.middlename,
tbl_user.lastname,
tbl_user.name_ext

这是你的问题。表将联接按员工id划分的总计组的子查询

SELECT DISTINCT tbl_user.firstname,
  tbl_user.middlename,
  tbl_user.lastname,
  tbl_user.name_ext,
  t3.amount_paid,
  t3.salary_paid,
  t3.total
FROM tbl_user
INNER JOIN tbl_salary ON tbl_user.employee_id = tbl_salary.employee_id
LEFT JOIN tbl_overtime ON tbl_overtime.employee_id = tbl_salary.employee_id
left join
  (select t1.employee_id
       , SUM(coalesce(t2.amount_paid, 0)) as amount_paid
       , SUM(coalesce(t1.salary_paid, 0)) as salary_paid
       , SUM(coalesce(t2.amount_paid, 0))  + SUM(coalesce(t1.salary_paid, 0)) as total
     from tbl_salary t1
     left join tbl_overtime t2 on t2.employee_id = t1.employee_id
     group by t1.employee_id) as t3 on t3.employee_id = tbl_user.employee_id

另一个很好的答案是@Royhey你能再帮我一次吗?你需要什么@JcJohn?请看我的链接。我有重复的条目,我希望避免添加那些状态为status=1i的状态。我有一个问题,即如果某个左连接在其他表中为空,则该左连接将加倍?在左连接期间,使用coalesce()更新为空值join@Metal嘿你能再帮我一次吗?我已经更新了sqlfiddle。我如何才能只添加那些状态为0的人?@JcJohn,请检查此
where
子句应位于from之后、join tables和group by之前