MySQL - where 子句中的排名函数

标签 mysql sql rank

我想在我的 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/

相关文章:

java - 如何使用 Scanner user_input ResultSet 中的整数变量在 Java 中选择特定的 MySQL 行?

php - 将商品和子商品插入订单

php - 使用一个查询选择不同行上的多个字段

python - 为什么 pandas "rank"百分位数不介于 0 和 1 之间?

java - ANTLR v4 的 mysql 语法文件中的语法错误

sql - 将 OUTPUT insert.id 与选定行中的值相结合

MySQL - 添加标志列以识别首次付款

sql - :SQL: select values from rows as columns

SQL Server 行号生成

sql - Oracle SQL 排名