Оцените каждого сотрудника в зависимости от его заслуг от высшего к низшему

0

Создайте две таблицы emp_merits (meritid, empid, date, meritpoints), emp1 (empid, empname). Каждый сотрудник будет получать очки за заслуги каждый месяц в зависимости от их производительности. Таким образом, один и тот же сотрудник может иметь несколько записей в таблице с разными точками доступа. Перечислите все достоинства, полученные конкретным сотрудником (здесь будет введено эмпирическое письмо) между конкретными датами. Ранжируйте каждого сотрудника на основе их точек достоинства от наивысшего до самого низкого

до сих пор я пробовал этот запрос

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
Теги:

2 ответа

0

Вы можете реализовать 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;
0

Вы можете попробовать следующее:

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
    показывает ошибки, пожалуйста, укажите это четко
  • 0
    в чем ошибка? Я смоделировал это следующим образом: 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); и это работает.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню