Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
select name from employee e
join (select department_id, max(salary) as max_salary
from employee e2
group by department_id) d
on d.department_id=e.department_id
where e.salary = d.max_salary
select department_id from employee group by department_id having count(id)<=3
select id from employee e1 where not exists(select null from employee e2 where e1.chief_id = e2.id and e1.department_id=e2.department_id)
SELECT department_id, SUM(salary) as sum_salary
FROM employee
GROUP BY department_id
ORDER BY sum_salary DESC LIMIT 1
SELECT department_id
FROM employee
GROUP BY department_id
HAVING SUM(salary)=(SELECT max(sum_salary)
FROM (SELECT department_id, SUM(salary) as sum_salary
FROM employee
GROUP BY department_id
)q1
)
, не имеющих назначенного руководителят.е. руководителя нету
работающего в том-же отделено он всё-таки есть
SELECT a.*, b.salary as boss_salary FROM employee a LEFT JOIN employee b ON a.chief_id=b.id WHERE a.salary > boss_salaryselect case when (select count(*) from t where value=0)>0 then 0
else (select case when (select count(*) from t where value<0)%2=0 then 1 else -1 end ) * (select exp(sum(log(abs(value)))) from t) end
from employee a,
employee b
select
exp(sum(log(case sign(salary) when 0 then 1 when -1 then -salary else salary end)))
*case sum(case sign(salary) when -1 then 1 else 0 end)%2 when 1 then -1 else 1 end
*sign(min(abs(salary)))
from employee
select
exp(sum(ln(decode(sign(salary),0,1,-1,-salary,salary))))
*decode(mod(sum(decode(sign(salary),-1,1,0)),2),1,-1,1)
*sign(min(abs(salary)))
from employee

select *
from (
select e.department_id,dense_rank()over(order by sum(salary) desc) dr
from hr.employees e
group by e.department_id
)
where dr=1
with t as (
select *
from hr.employees e
model
dimension by (row_number()over(order by 1) rn)
measures(1d multiply,salary salary)
rules(
multiply[any] order by rn desc= nvl(multiply[cv()+1],1)*nvl(salary[cv()],1)
)
)
select multiply from t where rn=1
Или с ограничением на кол-во:select multiply
from hr.employees e
model return updated rows
dimension by (row_number()over(order by 1) rn)
measures(1d multiply,salary)
rules
iterate(6e6) until( presentv(salary[iteration_number+1],1,0)=0)
(
multiply[0] = nvl(multiply[0],1) * nvl( salary[iteration_number+1] ,1)
)
Рекурсивным subquery factoring точно также, поэтому не стал писатьУ вас ошибка в реализации 1-го задания (выводятся руководители)
SELECT e.*
FROM EMPLOYEE AS e
WHERE
e.SALARY >
(
SELECT SALARY
FROM EMPLOYEE
WHERE
DEPARTMENT_ID = e.DEPARTMENT_ID
AND CHIEF_ID IS NOT NULL
)select a.*
from employee a, employee b
where b.id = a.chief_id
and a.salary > b.salary
Вывести список сотрудников, получающих заработную плату большую чем у непосредственного руководителяЗапрос практически дословно его повторяет. Выводятся сотрудники имеющие непосредственных руководителей (inner join), при условии того, что они получают больше этих самых руководителей. Ваш вариант запроса ищет что-то совсем другое.
Наш вариант теста на знание SQL