MySQL获取具有相同id的表的总和

标签 mysql join sum

我有四张表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

最佳答案

这样做有时可能会检索到无效结果,因为 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())

我认为每笔付款和预支现金的日期无关紧要,因为您是根据贷款日期查找其总计

关于MySQL获取具有相同id的表的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380353/

相关文章:

postgresql - 在 Postgresql 中加入整数列比加入 varchar 更有效?

python - 如何按单元格添加两个 pandas.DataFrame?

Excel 求和(如果 isnumber 表示非连续范围)

php - 如何从cakePHP中的连接表中不可用的表中获取数据

mysql - 按用户选择最近的事件示例帖子主题、评论主题、按时间排序的主题

mysql - Sql 到 Rails 查询关联、连接和 order_by

python - 可以在一行 Python 代码中使用求和和乘积符号吗?

android - 在 TableView 中显示结果集

php - 为什么mysqli open transcation锁住数据库?

mysql脚本转t-sql脚本