假设名字是unique,这样我们就可以加入了
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)
CREATE TABLE membersData(
name TEXT ,
elo DOUBLE,
wins INTEGER,
losses INTEGER,
matches INTEGER,
ranking INTEGER
);
INSERT INTO membersData (
ranking,
matches,
losses,
wins,
elo,
name
)
VALUES (
NULL,
4,
3,
1,
123123,
'James'
),
(
NULL,
5,
4,
1,
123,
'Top'
),
(
NULL,
5,
2,
3,
1000,
'harry'
),
(
NULL,
5,
0,
5,
450,
'kai'
);
查询 #1
UPDATE membersData
SET ranking = (SELECT COUNT(*) + 1
FROM membersData md2
WHERE md2.elo > membersData.elo
);
没有要显示的结果。
查询 #2
SELECT * FROM membersData ORDEr BY ranking;
| name |
elo |
wins |
losses |
matches |
ranking |
| James |
123123 |
1 |
3 |
4 |
1 |
| harry |
1000 |
3 |
2 |
5 |
2 |
| kai |
450 |
5 |
0 |
5 |
3 |
| Top |
123 |
1 |
4 |
5 |
4 |
View on DB Fiddle