Top.Mail.Ru
Ответы

Необходимо найти ошибки , дать развернутый ответ, почему это ошибка и как нужно правильно прописать запрос в этом месте.

Таблица Emrloyeers, Departments, Locations.

Вывести среднюю зп сотрудников департамента в разбивке по менеджерам.

Также сотрудник должен быть закреплен за менеджером и департамент расположен в городе Tokyo.

12345678910111213
 select department_id, 
manager_id, 
avg(salary) 
from employees e 
join departments d 
 
where e.department_id=d.department_id 
and manager_id <> null 
and Location_id=(select location_id from locations 
where city='Tokyo') 
and avg(salary)>10000 
 
group by department_id 
По дате
По рейтингу
Аватар пользователя
Оракул

Хз, доменку додумывать не хочу

Скорей всего это тоже не до конца правильно

123456789
 select department_id,   
       manager_id,   
       avg(salary)   
from employees e   
join departments d on e.department_id = d.department_id 
join locations l on d.location_id = l.location_id and l.city = 'Tokyo' 
where manager_id is not null 
group by department_id 
having avg(salary) > 10000 
Аватар пользователя
Просветленный

То что сразу бросилось в глаза
1 - JOIN по умолчанию в SQL - это INNER JOIN, у вас же запись, как у CROSS JOIN, не хватает инструкции ON и условия
2 - использование подзапроса и оператора '=' в инструкции WHERE не оптимально в данном случае, т.к. подзапрос может вернуть несколько вариантов и будет ошибка времени выполнения, поэтому используйте либо TOP(1) в подзапросе, либо используйте IN, если ссылаетесь на множество, либо квантификаторы ALL, ANY.
3 - manager_id <> null, такое работать не будет, либо IS NULL, либо IS NOT NULL
4 - поля manager_id не хватает в группировке, т.к. все стобцы, которые в SELECT, должны быть и в GROUP BY, если они не обернуты в агрегатные функции
5 - avg(salary) - использовать после группировки, в инструкции HAVING