当我试图在Leetcode(https://leetcode.com/problems/rank-scores/#/description)中查询问题时,我遇到了一个问题。
此问题的解决方案之一如下所示:
SELECT
Score,
@rank := @rank + (@prev <> (@prev := Score)) Rank
FROM
Scores,
(SELECT @rank := 0, @prev := -1) init
ORDER BY Score desc
我曾经读过一个艺术性的说法,即ORDER BY子句总是在最后运行,显然是在SELECT子句之后。虽然我在这个代码块中找不到它。删除或更改order by子句时,结果会更改(而不是顺序)。我想这可能是因为这里有一些用户定义的变量?
答案 0 :(得分:0)
根据手册here,在SELECT语句中,仅在发送到客户端时才评估每个选择表达式。两个select子句中的得分列 and order子句是确定的,但是 Score列之后的用户定义变量将在mysql服务器发送给客户端时进行评估。