Как найти сотрудника, который работал больше всего поездок? - PullRequest
0 голосов
/ 03 января 2019

Мне нужно обновить на 5% зарплату сотрудника, который совершил большинство поездок с начала текущего года и по сей день.Есть 2 типа сотрудников: водитель и хозяйка.Вот мои таблицы:

CREATE TABLE Employe(  
  nb_emp VARCHAR2(5),  
  salary NUMBER
);

nb_emp - это первичный ключ.

CREATE TABLE Trip(  
  id_trip NUMBER,  
  driver VARCHAR2(5),  
  hostess VARCHAR(5),  
  date_trip DATE
);

id_trip - это первичный ключ, драйвер и hostess ссылка nb_emp из таблицы Employee.

А вот мой запрос на драйвер:

update employe
set salary = salary*0.05 + salary
where nb_emp in (
    select driver 
    from trip t
    where 
        nb_emp = t.driver
        and t.date_trip >= TRUNC(SYSDATE,'YEAR')
        AND t.date_trip < SYSDATE
        and t.id_trip in (
            Select count(tt.id_trip) from trip tt having count(tt.id_trip) = (
                Select Max(s) FROM (select count(ttt.id_trip) as s FROM trip ttt
            )
        )
    )
);

1 Ответ

0 голосов
/ 03 января 2019

Один из способов найти работников, которые совершили большинство поездок:

select emp 
  from (
    select emp, count(1) cnt, max(count(1)) over () mcnt
      from (
        select driver as emp from trip where date_trip between trunc(sysdate, 'year') and sysdate
        union all
        select hostess from trip where date_trip between trunc(sysdate, 'year') and sysdate)
      group by (emp))
  where cnt = mcnt;

Используйте этот запрос в update выражении, как здесь:

update employe set salary = salary * 1.05 
  where nb_emp in (
    select emp 
      from (
        select emp, count(1) cnt, max(count(1)) over () mcnt
          from (
            select driver as emp from trip where date_trip between trunc(sysdate, 'year') and sysdate
            union all
            select hostess from trip where date_trip between trunc(sysdate, 'year') and sysdate)
          group by (emp))
      where cnt = mcnt);

Мои данные испытаний:

create table employe(nb_emp, salary) as (
    select 'D1', 1000 from dual union all
    select 'D2', 1000 from dual union all
    select 'H1', 1000 from dual union all
    select 'H2', 1000 from dual union all
    select 'H3', 1000 from dual );

create table trip (id_trip, driver, hostess, date_trip) as (
    select 1, 'D1', 'H1', date '2019-01-01' from dual union all
    select 2, 'D1', 'H2', date '2019-01-01' from dual union all
    select 3, 'D1', 'H2', date '2019-01-02' from dual union all
    select 4, 'D2', 'H1', date '2019-01-02' from dual union all
    select 5, 'D2', 'H2', date '2019-01-03' from dual );

Водитель D1 и хозяйка H2 совершили большинство поездок (3), и их зарплата была увеличена до 1050.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...