Возникли проблемы с использованием встроенного представления для всех данных

У меня возникли некоторые проблемы с использованием встроенного представления для создания столбца, в котором я рассчитываю зарплату /total_sal * 100. Моя проблема в том, что по какой-то причине я получаю значение не для всех сотрудников, а только для первого.

 select emp.ename, emp.sal, 
    ( select (emp.sal / sum(emp.sal) * 100))  
    from emp;

Я пытался осмотреться, чтобы увидеть, смогу ли я найти ответ, но не смог. Любая помощь будет очень полезна!

1 ответ

Решение

Ну, запрос в вопросе должен дать вам синтаксическую ошибку, так как подзапрос не имеет предложения from. Вам нужно только получить сумму в подзапросе, а не весь процент расчета:

select emp.ename,
       emp.sal,
       emp.sal / (select sum(emp2.sal) from emp as emp2) * 100 
from emp;

Альтернатива - переместить подзапрос в предложение from (производная таблица) и выполнить перекрестное соединение:

select emp.ename,
       emp.sal,
       emp.sal / t.tot_sal * 100 
from emp
join (select sum(emp2.sal) as tot_sal from emp as emp2) as t;
Другие вопросы по тегам