Php 对分词列排序
我有一张桌子,上面有员工id、姓名和薪水。我想根据工资对员工进行排名 表:雇员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 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您可以发布原始查询吗?或者您可以询问一个新的查询,并提供所有详细信息