У меня есть таблица с именем Scores
:Должно ли @prev <> (@prev: = Score) всегда быть ложным?
mysql> select * from Scores;
+------+-------+
| Id | Score |
+------+-------+
| 1 | 3.5 |
| 2 | 3.65 |
| 3 | 4 |
| 4 | 3.85 |
| 5 | 4 |
| 6 | 3.65 |
+------+-------+
6 rows in set (0.00 sec)
Выполните следующую SQL:
SELECT
Score,
@prev <> (@prev := Score) Res
FROM
Scores,
(SELECT @prev := -1) init
ORDER BY Score desc
получить результат:
+-------+------+
| Score | Res |
+-------+------+
| 4 | 1 |
| 4 | 0 |
| 3.85 | 1 |
| 3.65 | 1 |
| 3.65 | 0 |
| 3.5 | 1 |
+-------+------+
6 rows in set (0.00 sec)
Обратите внимание, эта часть @prev <> (@prev := Score)
я назначенную Score
к @prev
, поэтому @prev
всегда должен быть равен (@prev := Score)
(Jus t like @prev
должен всегда равняться @prev
), поэтому результат @prev <> (@prev := Score)
всегда должен быть 0, почему в результирующем наборе есть несколько 1?
Check: [SQL Fiddle] (http://sqlfiddle.com/#!9/10b63c/1). Помните: 'Для других операторов, таких как SELECT, вы можете получить ожидаемые результаты, но это не гарантируется. ... порядок оценки выражений с пользовательскими переменными не определен. 'См .: [9.4 Пользовательские переменные] (https://dev.mysql.com/doc/refman/5.6/en/user-variables.html) , – wchiquito