что означает SQL @x: = @x +1 и @x: = 0? - PullRequest
0 голосов
/ 09 сентября 2018

У меня была проблема с оценкой рейтинга в 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;

Кто-нибудь может помочь, пожалуйста?

1 Ответ

0 голосов
/ 09 сентября 2018

объявляем переменную @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         |

Просмотр на БД 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...