2016-12-07 45 views
0

目前我有2個表是文檔和項目表。如何在MYSQL中匹配外鍵和主鍵時使用SUM

CREATE TABLE IF NOT EXISTS `document` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `dateDoc` datetime NOT NULL, 
    `numDoc` varchar(45) NOT NULL, 
    `idCategory` int(11) DEFAULT NULL, 
    `subject` varchar(200) DEFAULT NULL, 
    `status` varchar(1) NOT NULL DEFAULT 'A', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=155 ; 

CREATE TABLE IF NOT EXISTS `item` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `idDoc` int(11) NOT NULL, 
    `numItem` int(11) NOT NULL, 
    `amount` decimal(14,4) NOT NULL, 
    `idTax` varchar(30) DEFAULT NULL, 
    `rateTax` decimal(5,2) DEFAULT NULL, 
    `amtTax` decimal(12,4) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=244 ; 

如何總結表'項目'中的金額和amtTax如果文檔(id)​​= item(idDoc)。

例如:

(原稿臺)

文檔ID = 1;

(項目表)

id = 1; 
idDoc = 1; 
amount = 50.00; 
amtTax = 10.00; 


id = 2; 
idDoc = 1; 
amount = 30.00; 
amtTax = 6.60; 

我想獲得RM96.60。

如果idDoc與文檔表的id匹配,如何總結mysql中的數量和amtTax作爲名爲(Total)的新列? 謝謝你的幫助!

回答

0

如果你要選擇與他們的數量和AMT稅之和的所有文件,請使用過的文件與組之間的連接:

SELECT SUM(item.amount) + SUM(item.amtTax) AS Total 
FROM document 
LEFT JOIN item 
    ON document.id = item.idDoc 

如果您想選擇只是一個單一的文件(例如,一個與id 1),你不需要使用group by,只需添加where子句:

SELECT document.*, sum(item.amount) + sum(item.amtTax) as Total 
FROM document LEFT JOIN item ON document.id = item.idDoc 
WHERE document.id = 1 
+0

嗨。如果我想根據文檔ID列出所有項目,該怎麼辦? – chonglt

+1

MySQL擴展了GROUP BY的用法,以便您可以在SELECT列表中使用未出現在GROUP BY子句中的非聚合列或計算。此外,由於我們正在撬開主鍵,所以不會有任何含糊之處。 –

+0

@ martin.macko.47只是因爲它允許這並不意味着我們應該使用它。此外,更新版本的MySQL可能根本不允許它。但除此之外,您的查詢看起來是正確的。 –