'订单的执行顺序由'当用户定义的变量存在时,MySQL中的子句

时间:2017-04-27 03:36:31

标签: mysql sql

当我试图在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子句时,结果会更改(而不是顺序)。我想这可能是因为这里有一些用户定义的变量?

1 个答案:

答案 0 :(得分:0)

根据手册here在SELECT语句中,仅在发送到客户端时才评估每个选择表达式。两个select子句中的得分列 and order子句是确定的,但是 Score列之后的用户定义变量将在mysql服务器发送给客户端时进行评估。