根据每个员工的优点从高到低对他们进行排名

Posted

技术标签:

【中文标题】根据每个员工的优点从高到低对他们进行排名【英文标题】:Rank each employee based on their merit points from highest to lowest 【发布时间】:2018-02-21 10:26:32 【问题描述】:

创建两个表emp_merits(meritid,empid,date,meritpoints),emp1(empid,empname) 每个员工每个月都会根据他们的表现获得功绩积分。因此,同一员工可以在表中有多个具有不同优点的条目。 列出特定员工在特定日期之间收到的所有优点(将在此处输入empid)

到目前为止我已经尝试过这个查询

select   empid , sum (meritpoints) as totalmerits , (DENSE_RANK()OVER (PARTITION BY empid ORDER BY meritpoints desc)) AS rank from emp_merit 
  group by empid,meritpoints 
  order by empid ,totalmerits desc

【问题讨论】:

【参考方案1】:

你可以试试这个:

SELECT @rownum := @rownum + 1 AS rank, a.*  
FROM (
SELECT empid, sum(meritpoints) AS totalmerits
FROM emp_merits 
GROUP BY empid
ORDER BY totalmerits) a, (SELECT @rownum := 0) r ;

您可能需要在 WHERE 子句中包含您的具体日期。

【讨论】:

它的显示错误,请您明确指出 错误是什么?我已经以这种方式建模了 create table emp_merits (meritid int, empid int, d date, meritpoints int); insert into emp_merits values(1,1,STR_TO_DATE('2018-02-12','%Y-%m-%d'),10); insert into emp_merits values(2,1,STR_TO_DATE('2018-02-12','%Y-%m-%d'),20); insert into emp_merits values(3,2,STR_TO_DATE('2018-02-12','%Y-%m-%d'),25); insert into emp_merits values(4,3,STR_TO_DATE('2018-02-12','%Y-%m-%d'),15); insert into emp_merits values(5,3,STR_TO_DATE('2018-02-12','%Y-%m-%d'),35); 并且它可以工作。 你可以先试试内插。主要的是你应该只在你的 GROUP BY 子句中使用 empid。不是优点。 表的表数据如下 empid mgrid empname 1 20 Ramya 2 30 Harish 3 20 Deepak 4 40 NULL 5 NULL Supriya 6 60 NULL 7 NULL Ramesh【参考方案2】:

您可以使用变量实现dense_rank()

select empid, totalmerits,
       (@rn := if(@m = totalmerits, @rn,
                  if(@m := totalmerits, @rn + 1, @rn + 1)
                 )
       ) as rank
from (select empid, sum(meritpoints) as totalmerits
      from emp_merit 
      group by empid
      order by totalmerits desc
     ) e cross join
     (select @m := -1, @rn := 0) params;

【讨论】:

以上是关于根据每个员工的优点从高到低对他们进行排名的主要内容,如果未能解决你的问题,请参考以下文章

joomla php从高到低排序数组[重复]

键盘录入5个学生的信息根据总分从高到低输出在控制台

奖学金(NOIP2007 普级组第一题)

Android 11.0 Camera 分辨率从高到低排列

java编程一个可以 进行多个选择题测验成绩(从高到低依次输出学生下标和成绩(可以重复))

Android 系统APK-Camera 将相机像素从高到低降序排列