我试图在一个SQL查询中实现Elo评级计算,但无法使其工作。我发现an article关于如何使用Postgres,但我不使用SQLite。另外,我的表模式有点不同:
CREATE TABLE teams (
name TEXT NOT NULL PRIMARY KEY
)
CREATE TABLE games (
"winner_team" TEXT REFERENCES teams,
"loser_team" TEXT REFERENCES teams
)
到目前为止,我有以下代码(为了简化问题,我只看赢家的球队,只增加1 elo,而不是做完整的计算):
WITH RECURSIVE elo_ratings(current_game_num, team, previous_elo, new_elo) AS (
-- Initialize all teams with the default elo
SELECT
0 AS game_number,
name,
1000.0 AS previous_elo,
1000.0 AS new_elo
FROM teams
UNION
SELECT
rowid AS game_number,
winner_team,
elo_ratings.new_elo as previous_elo,
elo_ratings.new_elo + 1
FROM games
JOIN elo_ratings ON current_game_num == games.rowid - 1
LIMIT 10000
)
SELECT *
FROM elo_ratings
但是对于这段代码,有一个全局elo_rating
,而不是每个参与者都有一个不同的elo_rating
。
如何才能完成呢?
1条答案
按热度按时间vlju58qv1#
我还不能提出一个纯SQL的解决方案,但是有一种方法可以使用JSON对象作为中间“表”来实现它。实际上,这可能是一个更好的解决方案。