Php 对分词列排序

Php 对分词列排序,php,mysql,Php,Mysql,我有一张桌子,上面有员工id、姓名和薪水。我想根据工资对员工进行排名 表:雇员 id employee_name employee_salary ------------------------------------ 1 Martin 3500 2 Su 4000 3 Alex 3500 4 Flora 8000 我期望的结果是 id employ

我有一张桌子,上面有员工id、姓名和薪水。我想根据工资对员工进行排名

表:雇员

id   employee_name  employee_salary
------------------------------------
 1   Martin            3500
 2   Su                4000
 3   Alex              3500
 4   Flora             8000     
我期望的结果是

id   employee_name   employee_salary   Rank
--------------------------------------------
 1   Martin            3500             3
 2   Su                4000             2
 3   Alex              3500             3
 4   Flora             8000             1   
我尝试使用rank()函数,查询是

select 
    salary, 
    rank() over (order by employee_salary desc) AS Rank 
from employee
这会引发mysql错误:

分析中发现3个错误


先前已找到别名。(第61位“排名”附近)
需要一个别名。(位置60处的“”附近)
意外标记。(第61位“等级”附近)


查询有什么问题吗?

如果不使用变量,您可以按以下方式获得排名

select a.*,
  (select count(*) + 1 
   from employee 
   where employee_salary > a.employee_salary) as rank
from employee a

Mysql 8支持

尝试此查询

SELECT id, employee_name, employee_salary, @rank := @rank + 1 AS Employee_rank FROM employee e, (SELECT @rank := 0) r ORDER BY employee_salary desc
结果是这样的


“以前找到了别名。(位置61的“秩”附近)应为别名。(位置60的“”附近)意外标记。(位置61的“秩”附近”对我来说,这看起来不像是MySQL错误。是的,但是这个查询速度很慢,因为与MySQL用户变量解决方案相比,关闭了相关子查询,尤其是在大型数据库上使用时tables@raymond,对。表中有1M条记录。有吗alternate@AmitSharma也许在
employee\u salary
上添加一个索引会有所帮助you@junaid,效果很好,但是如果表1是从中获取的,则使用查询joints@AmitSharma您可以发布原始查询吗?或者您可以询问一个新的查询,并提供所有详细信息