[英]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.