首页 > 解决方案 > 如何将列除以行数,然后按 1 到 5 的比例对其进行排名,5 是 mysql 中最大的

问题描述

我目前正在开展一个自动化报告的项目,其中我必须在 mysql 中编写一个查询才能自动完成它。一直试图在网上无休止地寻找这个但无济于事:(这是一个虚拟数据

Emp表按工资降序排序

{Empname | Salary}
Ellen | 45030
Claudia | 40000
collin | 25000
Meghan | 24350
Angelika | 24000
John | 20000
Smith | 20000
Adam | 16555
Andrew | 16000
Mayer | 13000

我需要先将薪水行数除以 5,然后将其按输出分组,因此如果行数为 10,例如,它将是 10/5=2,因此该列需要分组为 2,然后将前 2 排为 5,接下来的 2 排为 4,依此类推,请注意行数每次都会改变 所需的输出如下

期望的输出

{Empname | Salary | Salary Rank}
Ellen | 45030 | 5
Claudia | 40000 | 5
collin | 25000 | 4
Meghan | 24350 | 4
Angelika | 24000 | 3
John | 20000 | 3
Smith | 20000 | 2
Adam | 16555 | 2
Andrew | 16000 | 1
Mayer | 13000 | 1

我一直在尝试我发现的以下代码,但是它没有根据薪水列中的值分配排名,排名也不是从 5 到 1

select ceil(rnk/5.0) as grp,
`salary`, `emp name`
FROM
(
  select e.`salary`, e.`emp name`,
  (SELECT count(*) from `empdata` d
    where e.`salary`< d.`salary`) + 1 as rnk
   from `empdata` e
  )x
order by `salary` desc

标签: mysql

解决方案


推荐阅读