如何在SQL中计算两列的移动平均值

问题描述 投票:0回答:1

我正在尝试计算球队得分的移动平均值,但这应该包括客队和主队时的得分。

例如,我有下表

Match

客队 主队 客场得分 首页_分数
检测 BKN 106 92
达尔 99 119
雷霆 书房 122 124
分钟 135 119
乌塔 135 126

我可以使用窗口函数来获取

home_scores
的移动平均值,例如CHI,但我要计算的是CHI所有分数的平均值,所以还有第二行的99分。

我用来计算移动平均线的是:

SELECT
    *,
    AVG(home_score) OVER (PARTITION BY home_team 
                          ORDER BY match_date 
                          ROWS BETWEEN 10 PRECEDING AND CURRENT ROW) AS avgscore
FROM 
    Match

但是,我需要包含当前行中客队等于主队的行的客队得分平均值(在我的示例中,客队是 CHI)。

所以我预计输出为 114.67(即 99 + 119 + 126 的平均值)。我目前只得到两个 home_score 的平均值,即 122.5(119 和 126 的平均值)。

sql sqlite partition moving-average
1个回答
0
投票

考虑使用主队和客队组的

UNION ALL
将数据重新格式化为长格式,然后计算各队在比赛日期之间的运行平均值:

WITH combn AS (
    SELECT 
        match_date, 
        'away' AS team_type, 
        away_team AS team, 
        away_score AS score
    FROM Match
    UNION ALL
    SELECT 
        match_date, 
        'home' AS team_type, 
        home_team AS team, 
        home_score AS score
    FROM Match
)

SELECT
    match_date,
    team_type,
    team,
    AVG(score) OVER (
        PARTITION BY team 
        ORDER BY match_date 
        ROWS BETWEEN 10 PRECEDING AND CURRENT ROW
    ) AS run_avg_score
FROM combn
ORDER BY team, match_date
© www.soinside.com 2019 - 2024. All rights reserved.