MySQL - where子句中的rank函数

时间:2013-04-10 07:00:43

标签: mysql sql rank

我想在MySQL查询中使用rank函数。我使用了Rank function in MySQL

的建议

我想只选择排名最高的一行。我的查询如下:

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'

我做错了什么?我如何解决我的疑问?

1 个答案:

答案 0 :(得分:3)

您不能使用与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 clause
  • WHERE子句
  • GROUP BY子句
  • HAVING条款
  • SELECT条款
  • ORDER BY子句

ALIAS是在SELECT子句上创建的,因此WHERE子句无法访问它。