SQL SELECT проблема вывода данных

Melnyk Artem

Работаю в Postgresql. Задание надо найти список отдел с максимальной средней зарплатой сотрудников. Отдел то я нашел но никак не могу вывести еще строку name из таблицы department.

create table department (
    id bigint primary key,
    name text
);

create table employee (
    id bigint primary key,
    department_id bigint,
    chief_id bigint,
    name text,
    surname text,
    sex varchar(1) check (sex in('ч' ,'ж')),
    salary integer check(salary  > 0),
    foreign key (department_id) references department(id),
    foreign key (chief_id) references employee(id)
);

insert into department values
  (1,'native language'),
  (2,'foreign language'),
  (3,'mathematics'),
  (4,'exact sciences'),
  (5,'natural sciences');

insert into employee values
  (1,1,2,'Любов','Хребтак','ж',5621),
  (2,1,2,'Олександра','Павлюк','ж',5000),
  (3,1,2,'Галина','Шклярик','ж',4565),
  (4,1,2,'Марія','Даньо','ж',3500),
  (5,1,2,'Ярослава','Паньків','ж',4500),
  (6,1,2,'Ганна','Загарія','ж',4502),
  (7,2,8,'Ольга','Самборська','ж',6000),
  (8,2,8,'Анатолій','Камінський','ч',6500),
  (9,2,8,'Оксана','Головецька','ж',5500),
  (10,2,8,'Ольга','Гресик','ж',4300),
  (11,2,8,'Наталія','Ангелюк','ж',5040),
  (12,3,15,'Юрій','Юрійчук','ч',9500),
  (13,3,15,'Зорян','Дьоровольський','ч',8300),
  (14,3,15,'Любов','Гладченко','ж',5600),
  (15,3,15,'Лариса','Рудка','ж',6800),
  (16,3,15,'Уляна','Приємська','ж',4555),
  (17,4,null,'Леся','Котик','ж',7430),
  (18,4,null,'Сергій','Котик','ч',7900),
  (19,4,null,'Дарія','Стрельбицька','ж',5304),
  (20,5,23,'Ольга','Сердюк','ж',5600),
  (21,5,23,'Олександра','Молодиня','ж',7565),
  (23,5,23,'Валентина','Дзюжинмька','ж',9565),
  (24,5,23,'Оксана','Скоревич','ж',4563),
  (25,5,23,'Людмила','Винниченко','ж',5565),
  (26,5,23,'Ірина','Николюк','ж',3444);

select max(average_salary) from (
    select max(salary)/count(salary) as average_salary,
    department_id
    from employee
    group by department_id
) t1

Надо чтобы этот select еще выводил name из таблицы department. Помогите уже все голову сломал

1 ответ

Melnyk Artem

select
  d.name,
  max(e.salary)/count(e.salary) as average_salary,
from employee e
inner join department d
  on e.department_id = d.id
group by d.name
order by average_salary desc
limit 1;

licensed under cc by-sa 3.0 with attribution.