我正在尝试计算球队得分的移动平均值,但这应该包括客队和主队时的得分。
例如,我有下表
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 的平均值)。
考虑使用主队和客队组的
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