【问题标题】:Join 2 tables and show sum of a column with it using mysql加入 2 个表并使用 mysql 显示一列的总和
【发布时间】:2021-12-26 02:34:21
【问题描述】:

我有 2 个包含项目数据和付款的表格。每个项目可能有多个付款行。 表 1:项目

  id project_name
  1 Test Project
  2 Test Project 2

还有表 2:project_payments

id project_id payment_amount
1       1          100
2       1          200
3       1          100
4       2          150
5       2          200

我需要获取以下格式的数据

project_id payment_id payment amount  total_received
     1          1           100           400
     1          2           200           400
     1          3           100           400
     2          4           150           350
     2          5           200           350  

    

即通过每个project_id的支付金额之和得到total_received

我已经写了以下

SELECT projects.id as project_id, 
           projects.*, 
           project_payments.*, 
           sum(project_payments.payment_amount) 
FROM projects 
JOIN project_payments on projects.id = project_payments.project_id

但它只从每个项目返回一行。我怎样才能得到上述数据。

【问题讨论】:

  • 尝试左连接SELECT projects.id as project_id, projects.*, project_payments.*, sum(project_payments.payment_amount) FROM projects LEFT JOIN project_payments on projects.id = project_payments.project_id
  • This 应该回答你的问题
  • 它只返回一行
  • SUM 在聚合函数中,您可能需要GROUP BY,请参阅:dbfiddle.uk/… 的一些示例。

标签: mysql mariadb


【解决方案1】:
SELECT projects.*, 
       project_payments.*, 
       SUM(project_payments.payment_amount) OVER (PARTITION BY projects.id) total_received
FROM projects
JOIN project_payments ON projects.id = project_payments.project_id

https://dbfiddle.uk/?rdbms=mariadb_10.3&rdbms2=mysql_8.0&fiddle=0ed87c2ac05f20097c1272458ecd6e41

PS。需要 MySQL 8+ 或 MariaDB 10.2+。

【讨论】:

  • 我的服务器使用的是 MariaDB 10.3
  • @MuntashirAreRahi 代码适用于 MariaDB 10.3:dbfiddle.uk/…
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多