У меня есть таблица Employee with Salary. Я хочу перечислить Заработную плату (Зарплата) для каждого Сотрудника. Может кто-то, пожалуйста, помогите мне с запросом SQL для того же самого.Применение совокупных функций во всех колонках
ответ
Вы можете сделать это с помощью функции окна:
select e.*,
(salary - avg(salary) over()) as diff
from employees e;
Вы можете использовать вложенное вернуть одну строку со средней заработной платой. и присоедините эту строку к таблице сотрудников.
Что-то вроде этого:
SELECT e.emp_id
, e.salary
, e.salary - a.avg_salary
FROM employee e
CROSS
JOIN (SELECT AVG(t.salary) AS avg_salary
FROM employee t
) a
ORDER BY e.emp_id
всего несколько других вариантов; другие, уже опубликованные, должны хорошо служить цели - если мы все правильно выведем желаемый результат, не получим DDL или выборочные данные, а также ожидаемый результат от данных входов.
Если нет необходимости включать усредненную зарплату [как среднее значение по всем строкам] в дополнение к вычисленной разнице, то следующее [показанное с необязательным литьем в десятичный результат] использует скалярный подзаголовок для получения значение вычесть из каждой зарплаты работника:
select emp.*
, dec(salary - (select avg(salary)
from employee_table)
, 11, 0) as saldif
from employee_table as emp
Или использовать усредненные зарплаты как в разницы и в качестве колонки сам по себе, то опять скалярной подвыборки, но доступны для боковой ссылки в [явно joined- to] подзапрос; опять же, по желанию отливка для десятичных результатов:
select x.*
from table
(select avg(salary)
from employee_table
) as a (avgsal)
cross join lateral
(select emp.*
, dec(salary - avgsal , 11) as saldif
, dec(avgsal , 11) as salavg
from employee_table as emp
) as x
другого решения;)
with avgsalary as (
select avg(salary) avgsal from employee_table
)
select emp.*, case when emp.salary is null then cast(null as decimal) else round(emp.salary - avgs.avgsal, 2) end as diffsal, avgs.avgsal
from employee_table as emp cross join avgsalary avgs
И еще один вариант:
with EmpAvg (avgSalary)
as (SELECT avg(salary) from employee_table)
select e.*, a.avgSalary,
(e.salary - a.avgSalary) as diffAvg
from employee_table e cross join EmpAvg a
Там может быть много форм запросов, которые могут дать эквивалентные результаты , (Несмотря на то, что я отказался от вычисления расчетных значений, то не точно равных значений результата.)
- 1. подсчет вхождений во всех колонках
- 2. SQL UPDATE заявление подстроки во всех колонках
- 3. Применение вложенных функций сложения
- 4. только одно значение вставки во всех колонках в Databse
- 5. SQL Server: Посмотрите на Nulls во всех колонках
- 6. Получить строки с некоторым нулевым значением во всех своих колонках
- 7. Создание CSV с использованием нескольких запросов Ruby во всех колонках
- 8. Заменить весь текст во всех колонках, кроме последнего
- 9. Box-тень появляется во всех колонках в IE
- 10. Применение пользовательских функций
- 11. Применение нескольких функций через sapply
- 12. Как избежать saveOrUpdate на всех колонках зимуют
- 13. Применение Stat файла (тип структуры stat) во всех операционных системах
- 14. Повторное применение функций в схеме?
- 15. Применение списка функций в Haskell
- 16. Применение функций затрат в R
- 17. Применение функций и Клейсли стрелок
- 18. Применение списка функций к номеру
- 19. Применение использования функций и процедур
- 20. Применение агрегатной функции на колонках панд сводной таблицы
- 21. MySQL Уникальная комбинация во многих колонках
- 22. Сплит слова во многих колонках SQL
- 23. Правильная конструкция совокупных корней
- 24. применение жестов на всех UICollectionViewCells
- 25. Как централизовать код из моих функций init во всех контроллерах?
- 26. Scikit: Удалите строку функций, если она есть во всех документах
- 27. Поиск хранимых процедур/функций во всех базах данных
- 28. вызов будущей совместимости функций javascript во всех браузерах?
- 29. Центр окна JavaScript во всех современных браузерах без дополнительных функций
- 30. Заменить во всех во всех папке