1

我想在我的 MySQL 查询中使用 rank 函数。我在 MySQL 中使用了 Rank 函数的建议

我只想选择排名最高的一行。我的查询看起来像:

SELECT c1, c2, c3, @curRank := @curRank + 1 AS rank 
FROM tab1 t, (SELECT @curRank := 0) r 
WHERE t.c5 = 'asd' AND t.c6 = 'qwe' AND rank = 1 
ORDER BY t.c8 DESC

我收到以下错误:

ERROR 1054 (42S22): Unknown column 'rank' in 'where clause'

我究竟做错了什么?如何修复我的查询?

4

1 回答 1

5

您不能使用与子句ALIAS在同一级别上生成的WHERE,您可以用子查询包装它。例如,

SELECT *
FROM
(
   SELECT c1, c2, c3, @curRank := @curRank + 1 AS rank
   FROM tab1 t, (SELECT @curRank := 0) r 
   WHERE t.c5 = 'asd' AND t.c6 = 'qwe' 
   ORDER BY t.c8 DESC
) a
WHERE rank = 1

SQL 操作顺序如下:

  • FROM 子句
  • WHERE 子句
  • GROUP BY 子句
  • HAVING 子句
  • 选择子句
  • ORDER BY 子句

ALIAS是在子句上创建的,因此SELECT它还不能在WHERE子句上访问。

于 2013-04-10T07:03:27.590 回答