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

Apex飞镖联赛数据库:基于团队平均分计算让分的SQL需求

飞镖联赛团队统计及让分计算SQL实现

我有一个用于飞镖联赛的Apex数据库,已编写SQL计算每位玩家的比赛数、总积分及平均得分,语句如下:

select Team, name,
       COUNT(WEEK) * 3 GAMES,
       sum(game_1) + sum(game_2) + sum(game_3) points,
       Round(((sum(game_1) + sum(game_2) + sum(game_3)) / ((COUNT(WEEK) * 3))), 2) Average
from score_tbl
group by Team, name
order by 1

执行后得到玩家层面的统计结果:

TEAMNAMEGAMESPOINTSAVERAGE
1B Tyler614223.67
1Blind610818
1Jim V6538.83
1KC M68213.67
2J Spass610217
2Randy B610517.5
2Tim Ketz67412.33
2Todd Lapan6518.5

需要实现两个目标:

  • 按团队汇总玩家平均得分(如Team1总平均64.17,Team2总平均55.33)
  • 找出最高团队平均分,通过公式「最高平均分 - 各团队平均分 × 90%」计算各团队让分

解决方案

1. 计算团队玩家平均得分总和

通过CTE先获取每个玩家的平均得分,再按团队求和:

WITH player_stats AS (
    SELECT 
        Team,
        Round(((sum(game_1) + sum(game_2) + sum(game_3)) / ((COUNT(WEEK) * 3))), 2) Average
    FROM score_tbl
    GROUP BY Team, name
)
SELECT 
    Team,
    Round(SUM(Average), 2) AS Team_Total_Average
FROM player_stats
GROUP BY Team
ORDER BY Team;

执行结果:

TeamTeam_Total_Average
164.17
255.33

2. 计算各团队让分

在上述基础上,新增CTE获取最高团队平均分,再套用公式计算让分:

WITH player_stats AS (
    SELECT 
        Team,
        Round(((sum(game_1) + sum(game_2) + sum(game_3)) / ((COUNT(WEEK) * 3))), 2) Average
    FROM score_tbl
    GROUP BY Team, name
),
team_totals AS (
    SELECT 
        Team,
        Round(SUM(Average), 2) AS Team_Total_Average
    FROM player_stats
    GROUP BY Team
),
max_team_avg AS (
    SELECT MAX(Team_Total_Average) AS Highest_Average
    FROM team_totals
)
SELECT 
    tt.Team,
    tt.Team_Total_Average,
    Round(mta.Highest_Average - tt.Team_Total_Average * 0.9, 2) AS Handicap
FROM team_totals tt
CROSS JOIN max_team_avg mta
ORDER BY tt.Team;

执行结果:

TeamTeam_Total_AverageHandicap
164.176.42
255.3314.37

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:45:35