Мне нужно использовать псевдоним в предложении WHERE, но он продолжает говорить мне, что это неизвестный столбец. Есть ли способ обойти эту проблему? Мне нужно выбрать записи с рейтингом выше x. Рейтинг рассчитывается как следующий псевдоним:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
источник
HAVING
выполняется после получения данных иWHERE
выполняется раньше.Не знаю, работает ли это в mysql, но с помощью sqlserver вы также можете просто обернуть его так:
источник
Это довольно старый вопрос, за один ответ уже набралось 160 голосов ...
Тем не менее, я хотел бы прояснить это: на самом деле вопрос не в том, можно ли использовать псевдонимы в
WHERE
предложении.это совокупность. В этом
WHERE
предложении мы ограничиваем записи, которые нам нужны из таблиц, просматривая их значения.sum(reviews.rev_rating)
иcount(reviews.rev_id)
, однако, это не значения, которые мы находим в записи; это значения, которые мы получаем только после агрегирования записей.Так что
WHERE
это неуместно. Нам нужноHAVING
, так как мы хотим ограничить строки результатов после агрегирования. Не может бытьни
следовательно.
с другой стороны возможно и соответствует стандарту SQL. В то время как
возможно только в MySQL. Это недопустимый SQL согласно стандарту, так как
SELECT
предложение должно выполняться послеHAVING
. Из документов MySQL:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
источник
Если ваш запрос статический, вы можете определить его как представление, тогда вы можете использовать этот псевдоним в предложении where при запросе представления.
источник
источник