基于秩更新SQL数据库列

基于秩更新SQL数据库列,sql,database,sqlite,Sql,Database,Sqlite,我正在做一个项目,其中一个方面是根据每个球员的ELO分数对他们进行排名。我已经能够创建一个SQL查询,它可以作为输出提供排名,但我不知道如何让它实际更新数据库表。我目前正在使用SQLite 当前代码: SELECT name, elo, losses, matches, RANK() OVER(ORDER BY elo DESC) FROM membersData {] 如果您的名字是唯一的,我们将非常感谢您的帮助,这样我们就可以加入了 UPDATE members

我正在做一个项目,其中一个方面是根据每个球员的ELO分数对他们进行排名。我已经能够创建一个SQL查询,它可以作为输出提供排名,但我不知道如何让它实际更新数据库表。我目前正在使用SQLite

当前代码:

SELECT
  name,
  elo,
  losses,
  matches,
  RANK() OVER(ORDER BY elo DESC)

FROM membersData 
{]


如果您的名字是唯一的,我们将非常感谢您的帮助,这样我们就可以加入了

 UPDATE membersData m1
 INNER JOIN (
 SELECT
  name,
  RANK() OVER(ORDER BY elo DESC) newrank FROM membersData) m2 ON m1.name = m2.name

SET m1.rank = m2.newrank
模式(SQLite v3.30)


查询#1

UPDATE membersData 
SET ranking = (SELECT COUNT(*) + 1
                   FROM membersData md2
                   WHERE md2.elo > membersData.elo
                  );
没有要显示的结果


查询#2

SELECT * FROM membersData ORDEr BY ranking;
名称 埃洛 获胜 损失 比赛 排名 詹姆斯 123123 1. 3. 4. 1. 骚扰 1000 3. 2. 5. 2. 凯 450 5. 0 5. 3. 顶部 123 1. 4. 5. 4.
一种方法是
更新中的相关子查询:

UPDATE membersData md
    SET ranking = (SELECT COUNT(*) + 1
                   FROM membersData md2
                   WHERE md2.elo > md.elo
                  );

请考虑不要做这个更新,因为你计算的排名是导出的数据。为什么排名450高于123?这是我的错误450应该是3,而123是4thIM新到SQL,当执行这个时,我得到。[18:09:17]在执行数据库“棋子”的SQL查询时出错:接近“M1”。:语法错误。名称也是唯一的。您的代码中可能有错误,请做一个DBFIDLE,以便我可以检查。您已更改代码..它是否适用于sqlite?@ArkieMandziy mysql 5.7没有排名,onply mysql 8.0也有吗?您将您的问题标记为sql lite,因此我编辑了我的答案以满足您的要求您是一个传奇伙计,我非常感谢。我觉得这段代码对你不管用SQLite@ArkieMandziy为什么不呢?
UPDATE membersData md
    SET ranking = (SELECT COUNT(*) + 1
                   FROM membersData md2
                   WHERE md2.elo > md.elo
                  );