php - 获取相关表中的 SUM。如果没有找到,则求和为 0

标签 php mysql sql

我有这个查询:

$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/

相关文章:

php - 使用 Python/OpenCV 检测空心圆

php - 存储后是否必须释放 mysql 结果?

mysql - 左连接两个表并计数时的SQL执行顺序

sql - 为多个用户使用 SDF 数据库文件

php - 在 PHP 中删除嵌套的 bbcode(引号)

php - 使用php和mysql在Json脚本中生成嵌套的同结构表

javascript - 隐藏选择字段中的额外数据?

MySQL:将多个表导出到 CSV 文件

SQL:排除X分钟内出现的冗余记录的选择

php - Mysql错误: A connection attempt failed because the connected party did not properly respond