簡體   English   中英

收集一個表中的所有記錄,並對另一個表中的字段求和

[英]Gather all records from one table and SUM a field from another table

我正在嘗試獲取客戶的所有invoices ,然后從payments計算總和。 問題是,所有返回的行中, paid_to_date的SUM值都是相同的。

這是一個SQLFiddle

SELECT `invoices`.*, 
       DATE_FORMAT(`invoices`.`due_date`, '%M %d, %Y') AS `due_date`,
       totals.`paid_to_date`
FROM   `invoices`, 
       (SELECT `payments`.`invoice_id`, 
               SUM(`payments`.`amount`) `paid_to_date`
        FROM   `payments` 
        GROUP  BY `payments`.`invoice_id`) AS totals 
WHERE  `invoices`.`client_id` = 1
ORDER  BY `invoices`.`due_date` DESC

您需要執行JOIN而不是在FROM語句中調用兩個表。

SELECT `invoices`.*, 
       DATE_FORMAT(`invoices`.`due_date`, '%M %d, %Y') AS `due_date`, 
       totals.`paid_to_date` 
FROM   `invoices`
LEFT JOIN    (SELECT `payments`.`invoice_id`, 
                  SUM(`payments`.`amount`) `paid_to_date` 
              FROM   `payments` 
              GROUP  BY `payments`.`invoice_id`) AS totals 
                  ON `invoices`.`ID` = `totals`.`invoice_id`
WHERE  `invoices`.`client_id` = 1 
ORDER  BY `invoices`.`due_date` DESC 

編輯:更改為LEFT JOIN因為我不知道您想查看未付款的發票

包括SQL Fiddle以證明查詢功能符合預期。 http://sqlfiddle.com/#!9/50f08e/2

如評論中所述,您可能具有錯誤的主鍵和外鍵。 在您的SQL Fiddle中,我更改了您的付款發票ID,因為它們將用於不存在的發票。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM