Два SELECT один WHERE

ArchAL

Новичок
Не могу выполнить поиск по столбцу Score.
Запрос выглядит вот таким образом:
PHP:
SELECT po.LastName, po.FIrstName, (SELECT SUM(AchiveScore) FROM Achivments WHERE TID=po.TID) AS Score FROM TEACHERS AS po WHERE Score>100;
Отказывается выполнять поиск, говорит что Score не существует.
Пробовал создавать для этого поля переменную, но что-то или я напутал или так тоже нельзя...

PHP:
SELECT po.LastName, po.FIrstName, @ST:=(SELECT SUM(AchiveScore) FROM Achivments WHERE TID=po.TID) AS Score FROM TEACHERS AS po WHERE @ST>100;
Подскажите как выполнить такой запрос.

Поля Score в таблице Teachers изначально не существует.

В данном случае выдаёт пустую таблицу... хотя должен был выдать 3 человека.

Запрос вида
PHP:
SELECT po.LastName, po.FIrstName, (SELECT SUM(AchiveScore) FROM Achivments WHERE TID=po.TID) AS Score FROM TEACHERS AS po
Выполняется правильно, но нужно из него выбрать по условию, что сумма достижений больше 100.

Я БД только начал изучать.
 

ArchAL

Новичок
Не совсем понял ответа. С операцией JOIN помучался но всё равно не получил нужного результата. Поэтому и пришёл к такой формулировке запроса.
Запрос сам работает правильно, проблема в выполнении поиска по условию что поле SUM(AchiveScore) >100.
А может я тупо не туда условие вставляю...
Может его нужно при формировании поля SUM ставить...
 

iceman

говнокодер
PHP:
SELECT * FROM (
  SELECT
    po.LastName,
    po.FIrstName,
    (SELECT SUM(AchiveScore) FROM Achivments WHERE TID=po.TID) AS Score
  FROM TEACHERS AS po 
) as all
where all.Score = 5
не?
 

iceman

говнокодер
а
PHP:
  SELECT
    po.LastName,
    po.FIrstName,
    (SELECT SUM(AchiveScore) FROM Achivments WHERE TID=po.TID) AS Score
  FROM TEACHERS AS po
нужно оптимизировать как сказал Вурдалак
 

Вурдалак

Продвинутый новичок
Код:
SELECT ..., SUM(a.AchiveScore) AS score FROM TEACHERS AS t JOIN Achivments AS a ON t.TID = a.TID GROUP BY t.TID HAVING score > 100
 

ArchAL

Новичок
Ммм... попробую, огромное спасибо. Теперь понял почему у меня JOIN не правильно работал.
А если мне надо дополнительные условия, то нужно их в HAVING прописать?
Типа:
Код:
SELECT ..., SUM(a.AchiveScore) AS score FROM TEACHERS AS t JOIN Achivments AS a ON t.TID = a.TID GROUP BY t.TID HAVING score > 100 AND LastName <> 'Петров'
ORDER BY LastName, SecondName
 

zerkms

TDD infected
Команда форума
ArchAL
В HAVING пишутся только условия, связанные с агрегированными данными.
 

ArchAL

Новичок
Спасибо вам огромное всем, очень радует что есть ещё такие отзывчивые люди, а не как обычно "в поиск" :)
Я почти разобрался с этим запросом, чего-то он мне тяжело даётся...
 
Сверху