【问题标题】:MySQL getting sum of tables with the same idMySQL获取具有相同ID的表的总和
【发布时间】:2012-09-05 00:16:48
【问题描述】:

我有四张桌子person,loan,ca,payments

我想获取所有付款金额和现金垫款金额的总和,这些金额与从特定日期加入的人的贷款具有相同的 ID。

这是我的代码,但总和计算不正确:

SELECT pd.*,
    l.total_loan_amount,
    sum(c.ca_total_amount) AS ctot,
    sum(p.payment_amount)
FROM personal_data pd
LEFT JOIN loans l
    ON pd.id_personal_data = l.id_personal_data
LEFT JOIN ca c
    ON l.id_loan = c.id_loan
LEFT JOIN payments p
    ON l.id_loan = p.id_loan
WHERE l.loan_date = curDate()
    AND (
        c.ca_date = curDate()
        OR c.ca_date IS NULL
        )
    AND (
        p.payment_date = curDate()
        OR p.payment_date IS NULL
        )
GROUP BY pd.id_personal_data

【问题讨论】:

  • l.loan_date 是否为空?代码看起来不错...
  • 您是否收到任何错误或输出错误?
  • 输出错误...我手动计算了实际数据..它与输出不一样
  • 如果在我的 where 条件下没有付款或预付现金,我会捕获 null 值..
  • 请注意,通常会 GROUP BY all SELECT 中的未聚合列。

标签: mysql join sum


【解决方案1】:

这样做有时可能会检索到无效结果,因为 id 有时可能会或可能不会出现在其他表上。

尝试对要检索的每一列使用子查询。

SELECT  pd.*,
        l.total_loan_amount,
        c.totalCA,
        p.totalPayment
FROM    personal_data pd
        LEFT JOIN loans l
            ON pd.id_personal_data = l.id_personal_data
        LEFT JOIN
        (
            SELECT  id_loan, SUM(ca_total_amount) totalCA
            FROM    ca 
        --  WHERE   DATE(ca_date) = DATE(CURDATE()) OR
        --          ca_date IS NULL
            GROUP BY id_loan
        ) c ON l.id_loan = c.id_loan
        LEFT JOIN
        (
            SELECT  id_loan, SUM(payment_amount) totalPayment
            FROM    payments 
        --  WHERE   DATE(payment_date) = DATE(CURDATE()) OR
        --          payment_date IS NULL
            GROUP BY id_loan
        ) p ON l.id_loan = p.id_loan
WHERE DATE(l.loan_date) = DATE(curDate())

我认为dates 与每次付款和预借现金无关,因为您正在根据date of loan 查找其总数

【讨论】:

  • 但仍然可以获得总付款,现金预付款基于贷款和当前日期或特定日期?
  • @GeorgeDanGilDuran 是的。你试过上面的查询吗?给我一个反馈,如果有什么遗漏的话,我会及时更新。
  • 它只是给了我空的结果...我做了一些更正,尽管最后一个选择语句来自支付表,对吗?
  • @GeorgeDanGilDuran 是的,抱歉打错了,你能给我一些你的记录以便我检查吗?
  • Personal_date(uid,Name)-(1,'George'),(2,'Willy') : Loan(lid,loan_amount,date,uid)-(1,2000,date,1 ),(2,1000,date,2) : CA(cid,ca_amount,date,lid)-(1,500,date,1),(2,500,date,1),(3,500,date,2),(4,100, date,1):payments(pid,pay_amount,date,lid)-(1,200,date,1),(2,200,date,1).....对不起格式 man..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2016-04-06
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多