Похоже
select min(salary) as min_salary, round(min(salary)/sum(salary) * 100 , 1) as percent
from employees
group by department_id
;
Если вам также нужно имя сотрудника, который имеет наименьшую зарплату в каждом отделе (предполагается, что всегда есть только один), а затем добавить
, min(empl_name) keep (dense_rank first order by salary) as min_sal_empl_name
в SELECT
заявлении. Если могут быть связи за наименьшую зарплату, и вам нужны все сотрудники, скажите об этом - в этом случае вам, вероятно, нужны аналитические функции, как вы догадались. Что-то вроде:
select empl_name, salary, round(salary/tot_sal*100, 1) as percent
from (select empl_name, salary,
sum(salary) over (partition by department_id) as tot_sal,
rank() over (partition by department_id order by salary) as rn
from employees
)
where rn = 1
;
Добавлено: OP указали, что они нуждаются зарплату в процентах от общей заработной платы (по всем подразделениям) после всех. Это можно сделать, объединив ratio_to_report()
с пустым условием окон (без «раздела на») с rank()
, разделенным отделом, чтобы получить наименьшую зарплату в каждом отделе.
Если вам не нравится over()
для пункта взвешивания в ratio_to_report()
, он также может быть записан в виде over (partition by null)
, чтобы сделать его супер-ясно нет разделения не предназначен или необходимости.
Решение использует таблицу EMP в схеме SCOTT для тестирования, поскольку исходное сообщение не содержит данные образца.
select deptno, empno, ename, sal, percent
from (
select empno, ename, sal, deptno,
round(100 * ratio_to_report(sal) over(), 1) as percent,
rank() over (partition by deptno order by sal) as rn
from scott.emp
)
where rn = 1
;
DEPTNO EMPNO ENAME SAL PERCENT
------ ----- ------ ---- -------
10 7934 MILLER 1300 4.5
20 7369 SMITH 800 2.8
30 7900 JAMES 950 3.3
Нужна ли вам одна строка на одного сотрудника на выходе (очень странно) или всего одна строка за ДЕПАРТАМЕНТ? Или вам нужно получить имя сотрудника с самой низкой зарплатой? – mathguy
Поделитесь некоторым набором данных выборки и ожидаемым результатом. – XING