我在leetcode上进行排名得分问题,不确定在解决方案以下。我可以理解除@x := @x +1
和@x := 0
以外的所有部分。
select scores.score, ranks.rank from scores left join (
select score, @x := @x +1 as rank from (select distinct score from scores order by score desc) s, (select @x := 0) r
)
as ranks on scores.score = ranks.score order by scores.score desc;
有人可以帮忙吗?
最佳答案
声明var @x
初始化为int 0
select @x := 0
当您执行
select
子句时,@x
将添加1
。select @x := @x +1
这是一个样本
模式(MySQL v5.6)
CREATE TABLE T(
col1 varchar(51)
);
INSERT INTO T VALUES ('TEST');
INSERT INTO T VALUES ('TEST1');
查询#1
SELECT *,@x:=@x +1
FROM T CROSS JOIN (select @x := 0) v;
| col1 | @x := 0 | @x:=@x +1 |
| ----- | ------- | --------- |
| TEST | 0 | 1 |
| TEST1 | 0 | 2 |
View on DB Fiddle
注意
select score, @x := @x +1 as rank
from (select distinct score from scores order by score desc) s, (select @x := 0) r
查询中两个表之间的
,
逗号表示CROSS JOIN
关于mysql - SQL @x:= @x +1和@x:= 0是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52248472/