Как одним запросом получить среднее и максимальные значения по группам и всей таблице?

Есть стандартная схема 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.

→ Ссылка