Один из способов найти работников, которые совершили большинство поездок:
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
.