@YakutD

Как сравнить результаты подзапросов?

Вот пример запроса, получающий количество сотрудников с образованием, без него, и всех вместе:
SELECT (SELECT COUNT(temployee.*) FROM temployee,teducation WHERE 
		dfdepartment = tdepartment.dfobj AND
		teducation.dfemployee = temployee.dfobj
	   ) AS edu,
	   (SELECT COUNT(*) FROM temployee WHERE 
		dfdepartment = tdepartment.dfobj AND
		dfobj NOT IN (SELECT dfemployee FROM teducation)
	   ) AS notedu,
	   	   (SELECT COUNT(*) FROM temployee WHERE 
		dfdepartment = tdepartment.dfobj
	   ) AS vse,
	   	dfname
	   FROM tdepartment

Если я добавляю условие WHERE edu > notedu;
то получаю ошибку
column "edu" does not exist


Как мне правильно поступить чтобы решить эту задачу?
  • Вопрос задан
  • 504 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MaximaXXl
То что Вы написали Выше ... не комментирую
То что я написал должно повторить Ваш запрос, то что Вы хотели описано в Having
SELECT d.dfname, 
             COUNT(ed.*) edu,
             COUNT(case when ed.dfemployee is null then 1 end) notedu,
     	     COUNT(em.*) AS vse
     FROM tdepartment d
         left join temployee em on (em.dfdepartment = d.dfobj)
         left join teducation ed on ( ed.dfemployee = em.dfobj)
group by d.dfname
having edu > notedu

По left join temployee может там нужен и join но Ваш запрос работает как left join
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы