创建两个表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发布于 2018-02-21 18:37:09
你可以试试这个:
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子句中指定日期。
发布于 2018-02-21 19:54:19
您可以使用变量实现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;https://stackoverflow.com/questions/48903521
复制相似问题