簡體   English   中英

Mysql 從一個表列的總和減去另一個表列的總和

[英]Mysql from sum one table column subtract sum of another table column

有2張桌子。 在這兩個表中都存在用於點和用戶 ID 的列。 想要在一個表中為特定用戶求和所有積分,然后在另一個表中求和並從一張表的總數中減去另一張表的總數。 有 2 個解決方案(還有http://sqlfiddle.com/#!9/f040a2/1在這里放置了我的測試)。 請建議哪個對性能更好。

第一個解決方案。 非常清晰,似乎沒有“問題”

SELECT 
( SELECT SUM(`PurchasedPoints`) FROM `first_table` WHERE `Id` = ? ) 
- 
( SELECT SUM(`SpendPoints`) FROM `second_table` WHERE `Id` = ? ) AS `RemainingPaidPoints`

LEFT JOIN的另一個解決方案。 在某處讀到, LEFT JOIN在性能方面比子查詢更好。 但是代碼看起來很復雜,不確定使用它是否合理。

SELECT SUM(`Ft`.`PurchasedPoints`) - `St`.`SpendPoints` AS `RemainingPaidPoints` 
FROM `first_table` `Ft` 

LEFT JOIN (
SELECT SUM(`SpendPoints`) AS `SpendPoints`, `Id` FROM `second_table` WHERE `Id` = ? 
GROUP BY `Id`
) `St` ON `Ft`.`Id` = `St`.`Id` 

WHERE `Ft`.`Id` = ? 

GROUP BY `Ft`.`Id` 

兩者都得到相同的結果,但是......哪個對性能等更好,好嗎?

JOIN 適用於表,子查詢適用於數據集。 這就是 JOIN 比子查詢快的原因。

但是,在這兩個查詢中,您都在運行兩個單獨SELECT查詢。 所以在性能方面兩者都是相同的。 而且,如果您正在計算特定id的總和,那么您不需要使用GROUP BY

SELECT SUM(`Ft`.`PurchasedPoints`) - SUM(`St`.`SpendPoints`) AS `RemainingPaidPoints` 
FROM `first_table` `Ft` 
LEFT JOIN `second_table` `St`
ON `Ft`.`Id` = `St`.`Id` 
WHERE `Ft`.`user_id` = ?

暫無
暫無

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

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