我在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/

10-11 04:43