我有一个名为Scores
的表格:
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)
(就像@prev
一样等于@prev
),因此@prev <> (@prev := Score)
的结果应始终为0,为什么结果集中有1个?
答案 0 :(得分:1)
部分@prev <> (@prev := Score)
从左到右进行解析,因此第一个@prev
仍然具有其先前的值,因为这是预期的,然后才会为其分配新值。