MySQL 贷款、付款和客户

时间:2021-07-12 17:53:11

标签: mysql payment

我有 3 个表“客户”、“贷款”和“付款”

表客户:

+------------+-------------+
| id_client  | name        |
+------------+-------------+
| 1          | James       |
| 2          | Robert      |
| 3          | Michael     |
+------------+-------------+

表贷:

+-------------+-------------+-------------+-------------+
| id_loan     | id_client   | date_loan   | amount_loan |
+-------------+-------------+-------------+-------------+
| 1           | 2           | 2020-07-01  | 3000000     |
| 2           | 3           | 2021-07-12  | 2000000     |
+-------------+-------------+-------------+-------------+

表付款:

+-------------+-------------+--------------+----------------+
| id_payment  | id_loan     | date_payment | amount_payment |
+-------------+-------------+--------------+----------------+
| 1           | 1           | 2020-08-03   | 50000          |
| 2           | 1           | 2020-09-03   | 50000          |
| 3           | 1           | 2020-10-03   | 50000          |
| 4           | 1           | 2020-11-03   | 50000          |
| 5           | 1           | 2020-12-03   | 50000          |
| 6           | 1           | 2021-01-03   | 50000          |
| 7           | 1           | 2021-02-03   | 50000          |
| 8           | 1           | 2021-03-03   | 50000          |
| 9           | 1           | 2021-04-03   | 50000          |
| 10          | 1           | 2021-05-03   | 50000          |
| 11          | 1           | 2021-06-03   | 50000          |
+-------------+-------------+--------------+----------------+

我想打印这个:

+-------------+-------------+-------------+-------------+-------------+
| id_loan     | client      | date_loan   | amount_loan | amount_left |
+-------------+-------------+-------------+-------------+-------------+
| 1           | Robert      | 2020-07-01  | 3000000     | 2450000     |
| 2           | Michael     | 2021-07-12  | 2000000     | 2000000     |
+-------------+-------------+-------------+-------------+-------------+

请注意,迈克尔有一笔贷款,但尚未付款。

我几乎完成了这个查询:

SELECT loans.id_loan,
   clients.name,
   loans.date_loan,
   loans.amount_loan,
   (loans.amount_loan-SUM(payments.amount_payment)) AS amount_left
FROM loans
LEFT JOIN clients ON loans.id_client = clients.id_client
LEFT JOIN payments ON loans.id_loan = payments.id_loan

但迈克尔显然没有被列出,因为他还没有付款。

2 个答案:

答案 0 :(得分:0)

您只需要添加一个 GROUP BY loans.id_loan,然后应该会出现缺少的行。另外,我建议将 clients 上的 JOIN 更改为仅 JOIN

SELECT loans.id_loan,
   clients.name,
   loans.date_loan,
   loans.amount_loan,
   (loans.amount_loan-SUM(payments.amount_payment)) AS amount_left
FROM loans
JOIN clients ON loans.id_client = clients.id_client
LEFT JOIN payments ON loans.id_loan = payments.id_loan
GROUP BY loans.id_loan

演示:CMakeLists.txt

答案 1 :(得分:0)

使用子选择获取付款

print(
    df.loc[df[['Col_1', 'Col_2']].duplicated(keep=False)]
      .drop_duplicates()
      .groupby(['Col_1', 'Col_2'])
      .filter(lambda x: x['Label'].size>1)
)
   Label Col_1 Col_2 Col_3
2      0     B    24     Z
4      1     B    24     T

example