You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL查询中关联日志表并计算真实总积分?

修改后的SQL语句
SELECT 
    users.ID, 
    user_email, 
    SUM(rewards.points) AS totalPoints,
    SUM(log.points) AS deductedPoints,
    SUM(rewards.points) + COALESCE(SUM(log.points), 0) AS real_total_points
FROM wp_users AS users
INNER JOIN wp_wc_points_rewards_user_points AS rewards 
    ON users.id = rewards.user_id
LEFT JOIN wp_wc_points_rewards_user_points_log AS log 
    ON users.id = log.user_id
    AND log.points < 0 -- 只取日志表中扣减积分的记录
WHERE rewards.points <> 0 -- 明确筛选rewards表中非0的积分记录
GROUP BY users.ID, user_email -- 按用户主键和邮箱分组,避免分组报错
HAVING real_total_points > 0 -- 可选:如果只需要真实总积分大于0的用户
ORDER BY real_total_points DESC
核心修改点说明
  1. 关联日志表并筛选负值:用LEFT JOIN关联日志表,同时在关联条件里加上log.points < 0,直接过滤出扣减积分的记录,这样没有扣减记录的用户也不会被排除。
  2. 计算真实总积分:原查询的总积分totalPoints加上日志表中所有扣减积分的总和(因为日志里的points是负数,加负数等于减去绝对值)。用COALESCE处理没有扣减记录的情况,防止NULL导致计算结果出错。
  3. 消除字段歧义:把原查询里的WHERE points <> 0改成rewards.points <> 0,避免多表关联时字段名冲突。
  4. 规范分组逻辑:分组字段加上users.ID,符合SQL的严格分组规则,避免开启ONLY_FULL_GROUP_BY模式时出现错误。

内容的提问来源于stack exchange,提问作者Jess McKenzie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:00:01