我有这个查询:
$sql = "SELECT m.id FROM members m
LEFT JOIN orders o ON o.user_id = m.id AND
YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND
MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LEFT JOIN transactions t ON t.user_id = o.user_id";
我需要获取交易点数总和,所以我这样做:
$sql = "SELECT m.id, COALESCE(SUM(t.points), 0) AS total_points FROM members m
LEFT JOIN orders o ON o.user_id = m.id AND
YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND
MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LEFT JOIN transactions t ON t.user_id = o.user_id";
但是当我执行此操作时,我只会获得包含一些交易(和订单)的行。当没有找到交易时,我必须做什么才能获得 0 作为total_points?
文字描述:我想获取上个月创建的订单(订单表)的积分奖励总和(来自交易表)。
谢谢!
最佳答案
获取每个用户的积分总和,并在左连接
中使用它,当用户没有交易时,得到0
。
SELECT m.id, COALESCE(t.total_points, 0) AS total_points
FROM members m
LEFT JOIN orders o ON o.user_id = m.id AND
/* use this instead of functions which prevent indexes on the date column from being used */
o.date >= date '2016-11-01' AND o.date <= date '2016-11-30'
LEFT JOIN (select user_id, SUM(points) total_points
from transactions group by user_id) t ON t.user_id = o.user_id
关于php - 获取相关表中的 SUM。如果没有找到,则求和为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290515/