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

player_games表近7天球员进球数统计SQL异常问题咨询

解决过去7天球员进球总数统计问题

我来帮你排查下问题,你的SQL语句有两个关键错误导致结果不对:

  1. SUM函数的参数错误:你用单引号把scores括起来了,这会让数据库把它当成一个字符串常量(而不是字段名)。字符串转成数字的话默认是0,所以SUM的结果自然都是0。应该去掉单引号,或者用反引号包裹字段名(如果字段名是关键字的话)。
  2. 缺少时间过滤条件:你的查询没有限定game_played的范围,所以统计的是所有历史数据,而不是过去7天的。

修正后的SQL语句

SELECT 
    player_id AS playerID, 
    SUM(scores) AS total_scores
FROM 
    `player_games`
WHERE 
    -- 筛选过去7天的记录,CURDATE()取当前日期(不含时间)
    game_played >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY 
    player_id
ORDER BY 
    total_scores DESC;

额外说明

  • 如果game_played是带时间的DATETIME/TIMESTAMP类型,建议用NOW()代替CURDATE(),这样能精确筛选过去7天的所有时间点,避免漏掉当天的比赛:
    WHERE game_played >= DATE_SUB(NOW(), INTERVAL 7 DAY)
    
  • 如果你的game_played是字符串格式存储的(不推荐,但如果是这样的话),需要先转换成日期类型再比较,比如存储格式是YYYY-MM-DD:
    WHERE STR_TO_DATE(game_played, '%Y-%m-%d') >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
    
  • 如果需要显示过去7天没有进球的球员(进球数为0),你需要关联球员主表(假设表名为players)做左连接:
    SELECT 
        p.player_id AS playerID, 
        COALESCE(SUM(pg.scores), 0) AS total_scores
    FROM 
        players p
    LEFT JOIN 
        player_games pg 
        ON p.player_id = pg.player_id 
        AND pg.game_played >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
    GROUP BY 
        p.player_id
    ORDER BY 
        total_scores DESC;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:01:19