Как одним запросом получить среднее и максимальные значения по группам и всей таблице?
Есть стандартная схема HR с таблицей employees, помогите составить в ней запрос:
вычислите одним запросом среднюю и максимальную заработные платы по отделам и всей организации.
Вот так делаю двумя запросами:
SELECT department_id,ROUND(AVG (salary)) avg_salary, MAX (salary) max_salary_on_departments
FROM employees GROUP BY department_id;
SELECT ROUND(AVG (salary)) avg_salary, MAX (salary) max_salary_on_departments
FROM employees;
А как получить тотже результат одним запросом?
Ответы (2 шт):
Автор решения: nörbörnën
→ Ссылка
Дарья, вы правильно составили запросы! Используйте оператор UNION для того чтобы объединить результаты:
SELECT
department_id,
ROUND(AVG(salary)) avg_salary,
MAX(salary) max_salary_on_departments
FROM
employees
where
DEPARTMENT_ID is not null
GROUP BY
department_id
UNION
SELECT
null as department_id,
ROUND(AVG(salary)) avg_salary,
MAX(salary) max_salary_on_departments
FROM
employees
Автор решения: 0xdb
→ Ссылка
Самое простое, вот так (на db<>fiddle):
select
case grouping (department_id)
when 0 then coalesce (to_char (department_id), 'outsource')
else 'total' end department,
round (avg(salary)) avgsalary,
max(salary) maxsalary
from hr.employees
group by rollup (department_id)
order by department_id
/
DEPARTMENT AVGSALARY MAXSALARY
---------------- ---------- ----------
10 4400 4400
20 9500 13000
30 4150 11000
40 6500 6500
50 3476 8200
60 5760 9000
70 10000 10000
80 8956 14000
90 19333 24000
100 8601 12008
110 10154 12008
outsource 7000 7000
total 6462 24000
Из вопроса непонятно, что делать с внештатными сотрудниками, оставил их в outsource.