我想在我的 MySQL 查询中使用排名函数。我使用了 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'
我做错了什么?如何修复我的查询?
最佳答案
您不能使用与WHERE
子句在同一级别生成的ALIAS
,您可以使用子查询将其包装起来。例如,
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子句
- SELECT子句
- ORDER BY 子句
ALIAS
是在 SELECT
子句上创建的,因此它还不能在 WHERE
子句上访问。
关于MySQL - where 子句中的排名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15919067/