首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据每个员工的优点从高到低对他们进行排名

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

Stack Overflow用户
提问于 2018-02-21 18:26:32
回答 2查看 48关注 0票数 0

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

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2018-02-21 18:37:09

你可以试试这个:

代码语言:javascript
复制
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子句中指定日期。

票数 0
EN

Stack Overflow用户

发布于 2018-02-21 19:54:19

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

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48903521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档