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

SQL计算回合平均得分时如何将缺失参赛记录计为0?

解决方案:计算包含未参与回合玩家的平均得分

要实现把未参与对应回合的玩家得分算作0再计算平均,核心是先构建所有玩家与所有回合的完整组合,再关联原数据填充得分(空值替换为0),最后计算平均值。以下是适用于Exasol和MySQL的通用方案:

完整SQL代码

SELECT
    all_combinations.Round,
    AVG(COALESCE(r.Points, 0)) AS avg_points
FROM
    -- 生成所有玩家与所有回合的笛卡尔积
    (SELECT DISTINCT Player FROM results) AS all_players
    CROSS JOIN
    (SELECT DISTINCT Round FROM results) AS all_rounds
    AS all_combinations
    -- 左连接原表,匹配已有得分记录
    LEFT JOIN results r
        ON all_combinations.Player = r.Player
        AND all_combinations.Round = r.Round
GROUP BY
    all_combinations.Round
ORDER BY
    all_combinations.Round;

代码说明

  1. 构建全量组合:通过CROSS JOIN将所有唯一玩家和所有唯一回合进行交叉关联,确保每个玩家在每一个回合都有一条记录,不管是否实际参与。
  2. 填充0分:用COALESCE(r.Points, 0)把左连接后没有匹配到得分的记录(即玩家未参与该回合)的得分替换为0。
  3. 计算平均:按回合分组后,对填充后的得分计算平均值,此时的平均就包含了未参与玩家的0分。

测试结果验证

针对你提供的测试数据,执行后会得到如下结果:

Roundavg_points
12.0
22.0
35.0
45.0

完全符合要求的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:57:21