【问题标题】:MySQL query to get SUM and merged results from 3 tablesMySQL 查询从 3 个表中获取 SUM 和合并结果
【发布时间】:2013-11-30 11:46:57
【问题描述】:

我的 MySQL 数据库中有 3 个表。表格和列类似于下面的示例

User

id, name,  dob,       gross_salary
----------------------------------
1,  test1, 12 Mar 90, 50000
2,  test2, 10 Jan 85, 45000

Wage

ida, date,      allowence_paid
------------------------------
1,   10 Jul 13, 12000
2,   10 Aug 13, 23000
2,   12 Aug 13, 1000
1,   15 Aug 13, 15000

Loan

id, date,      loan_amount
--------------------------
2,  05 Jul 13, 500
1,  05 Aug 13, 2500
1,  06 Aug 13, 1200

我需要将这三个表合并到 8 月 13 日的结果中,例如

id, name,  allowence_paid, loan_Amount, paid
--------------------------------------------
1,  test1, 15000,          3700,        11300
2,  test2, 24000,             0,        24000

在我的情况下,需要从两个不同的表连接到另一个表的两列的总和。

我可以获得查询方面的帮助吗?我已经按照MySQL JOIN with SUM and 3 tables 进行了实验,但失败了。

【问题讨论】:

  • 它叫做join。你有几种口味,其中inner joinleft (outer) join 是最常用的。
  • 您应该知道,即使人们知道答案,当您根本没有表现出任何努力时,他们也不愿意提供帮助。这对我来说就像家庭作业。我们是来帮助你的,而不是完成你的作业。
  • 我期待专家的帮助。不给初学者分配任何家庭作业。我已经按照链接stackoverflow.com/questions/11040948/… 进行了实验,但失败了。

标签: php mysql sql


【解决方案1】:

这似乎有效:

select *, allowence_paid-loan_amount as paid
from
(
select User.id as UserId, User.name as UserName, sum(allowence_paid) as allowence_paid
from Wage join User on Wage.ida=User.id 
and Wage.date between '2013-08-01 00:00:00' and '2013-08-31 23:59:00'
  group by UserId
) W JOIN
(
select User.id as UserId, User.name as UserName, sum(coalesce(loan_amount,0)) AS   loan_amount 
from Loan right outer join User on Loan.id=User.id 
and Loan.date between '2013-08-01 00:00:00' and '2013-08-31 23:59:00'
group by UserId
) L ON W.UserId = L.UserId

SQL 小提琴here.

【讨论】:

  • 优秀。非常感谢“中微子”。
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多