Sql 给定参与游戏的玩家,根据总分变化对玩家组合进行排名

Sql 给定参与游戏的玩家,根据总分变化对玩家组合进行排名,sql,Sql,球员们组成我称之为小队的组合,在比赛中发挥作用。他们通过阵容表连接到游戏表。一个队的球员人数可以从1-5人不等。我想创建一个球队排行榜,但我无法回答这个问题 我想排除一人小组 我对排名标准没有强烈的意见,但到目前为止,我提出的最好的建议是elo_change字段的总和。输球队的球员都会得到消极的elo_变化,而获胜队的球员会得到积极的变化。如果一个基于其他标准的排名,比如赢的次数更容易,那就没关系了 编辑此外,如果该模式使查询成为可能,我可以对其进行更改。FWIW我当前的后端是sqlite,

球员们组成我称之为小队的组合,在比赛中发挥作用。他们通过阵容表连接到游戏表。一个队的球员人数可以从1-5人不等。我想创建一个球队排行榜,但我无法回答这个问题

  • 我想排除一人小组
  • 我对排名标准没有强烈的意见,但到目前为止,我提出的最好的建议是
    elo_change
    字段的总和。输球队的球员都会得到消极的elo_变化,而获胜队的球员会得到积极的变化。如果一个基于其他标准的排名,比如赢的次数更容易,那就没关系了
编辑此外,如果该模式使查询成为可能,我可以对其进行更改。FWIW我当前的后端是sqlite,如果我转向更强大的东西,它可能是postgresql

表格结构为:

CREATE TABLE IF NOT EXISTS "team" (
  "id" integer NOT NULL PRIMARY KEY,
  "teamname" varchar(255) NOT NULL COLLATE nocase
);

CREATE TABLE IF NOT EXISTS "game" (
  "id" integer NOT NULL PRIMARY KEY,
  "winner_id" integer,
  "loser_id" integer,
  "home_team_id" integer NOT NULL,
  "away_team_id" integer NOT NULL,
  "team_size" integer NOT NULL,
  "is_completed" integer NOT NULL,
  "timestamp" datetime NOT NULL,
  FOREIGN KEY ("winner_id") REFERENCES "team" ("id"),
  FOREIGN KEY ("loser_id") REFERENCES "team" ("id"),
  FOREIGN KEY ("home_team_id") REFERENCES "team" ("id"),
  FOREIGN KEY ("away_team_id") REFERENCES "team" ("id")
);

CREATE TABLE IF NOT EXISTS "player" (
  "id" integer NOT NULL PRIMARY KEY,
  "name" varchar(255) NOT NULL COLLATE nocase,
  "elo" integer NOT NULL,
  "team_id" integer,
  FOREIGN KEY ("team_id") REFERENCES "team" ("id")
);

CREATE TABLE IF NOT EXISTS "lineup" (
  "id" integer NOT NULL PRIMARY KEY,
  "game_id" integer NOT NULL,
  "player_id" integer NOT NULL,
  "team_id" integer NOT NULL,
  "elo_change" integer NOT NULL,
  FOREIGN KEY ("game_id") REFERENCES "game" ("id"),
  FOREIGN KEY ("player_id") REFERENCES "player" ("id"),
  FOREIGN KEY ("team_id") REFERENCES "team" ("id")
);
在您的数据模型中,“团队”是“团队”吗?如果是这样的话,你算一下输赢就足够了吗?下面的“伪”mysql查询汇总了团队的胜负(语法可能因您使用的数据库而异)


不,小队团队把它想象成试图对NBA球队的首发阵容与该队的大多数胜利进行排名。在这种情况下,阵容/阵容比他们所属的球队更重要,理想情况下,我对他们的全部elo_变化感兴趣。我不太喜欢体育统计数据,但听起来有点像需要一张有id、squadname、teamid的球队表。球员可以通过squadid和playerid的多对多表与球队联系。一个队可以通过一个队对多表分配给一场比赛(或者你也可以将胜利者和失败者的队添加到比赛表)。有了这些,你就可以捕捉每场比赛的阵容。这可能会有帮助吗?我很难想象这一点,或者它将如何让我更接近。小队ID、小队名称和小队.TeamID不是我需要的信息(它们没有名字,小队可以也将经常更换球队。球员A和B可以在第1队一起打几场比赛,然后在第2队一起打)。球队是球员A和球员B的组合。据我所知,我需要的所有数据都记录在了阵容表中,我只是不知道如何以这种方式获得。
select team.teamname, 
       sum(CASE WHEN team.id = game.winner_id THEN 1 ELSE 0 END) as wins, 
       sum(CASE WHEN team.id = game.loser_id THEN 1 ELSE 0 END) as losses
   from team, game
where (team.id = game.winner_id or team.id = game.loser_id)
  and game.is_completed = 1
  and game.team_size > 1
group by team.teamname
order by wins desc, losses asc