Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Сергей Шеин Ученик (96), на голосовании 1 год назад
Таблица Emrloyeers, Departments, Locations.

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

Также сотрудник должен быть закреплен за менеджером и департамент расположен в городе Tokyo.
 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
Голосование за лучший ответ
Оракул Оракул (62089) 1 год назад
Хз, доменку додумывать не хочу

Скорей всего это тоже не до конца правильно
 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
Александр Просветленный (21145) 1 год назад
То что сразу бросилось в глаза
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
Похожие вопросы