Можете ли вы использовать псевдоним в предложении WHERE в mysql?

Мне нужно использовать псевдоним в предложении 9X_having-clause WHERE, но он продолжает говорить мне, что 9X_sql-syntax это неизвестный столбец. Есть ли способ 9X_sql-query обойти эту проблему? Мне нужно выбрать записи 9X_mysqld с рейтингом выше x. Рейтинг рассчитывается 9X_sql как следующий псевдоним:

sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating

123
0
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: Можете ли вы использовать псевдоним в предложении WHERE в mysql?

Вы можете использовать предложение HAVING, которое 9X_sql-select может видеть псевдонимы, например

 HAVING avg_rating>5

, но в предложении 9X_mysqlclient where вам нужно будет повторить свое выражение, например

 WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5

НО! Не 9X_mysqldump все выражения будут разрешены - использование 9X_sql-syntax агрегатной функции, такой как SUM, не будет 9X_mysql-server работать, и в этом случае вам нужно будет 9X_mysqlclient использовать предложение HAVING.

Из MySQL Manual:

Нельзя 9X_mysqldump ссылаться на псевдоним столбца в предложении 9X_mysql-query WHERE, потому что значение столбца может 9X_sql еще не быть определенным, когда предложение 9X_mysql-query WHERE выполняется. См. Section B.1.5.4, “Problems with Column Aliases”.

236
3

  • Если я повторяю это выражение, оно говорит мне: «недопустимое использо ...

Ответ #2

Ответ на вопрос: Можете ли вы использовать псевдоним в предложении WHERE в mysql?

Я не знаю, работает ли это в mysql, но с 9X_sqlselect помощью sqlserver вы также можете просто 9X_mysqlclient обернуть его следующим образом:

select * from (
  -- your original query
  select .. sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating 
  from ...) Foo
where Foo.avg_rating ...

33
0

Ответ #3

Ответ на вопрос: Можете ли вы использовать псевдоним в предложении WHERE в mysql?

Это довольно старый вопрос, за один ответ 9X_mysqldump уже набралось 160 голосов ...

Тем не менее, я 9X_sql-query хотел бы прояснить это: на самом деле вопрос 9X_sql-select не в том, можно ли использовать имена псевдонимов 9X_having-clause в предложении WHERE.

sum(reviews.rev_rating) / count(reviews.rev_id) as avg_rating

- это агрегирование. В предложении 9X_having WHERE мы ограничиваем записи, которые нам нужны, из 9X_sql-syntax таблиц, просматривая их значения. Однако 9X_sql-syntax sum(reviews.rev_rating) и count(reviews.rev_id) не являются значениями, которые мы находим 9X_mysql в записи; это значения, которые мы получаем 9X_mysqldump только после агрегирования записей.

Итак, WHERE неуместен. Нам 9X_mysqldump нужен HAVING, так как мы хотим ограничить строки 9X_sql-syntax результатов после агрегирования. Этого не 9X_sql-query может быть

WHERE avg_rating > 10

ни

WHERE sum(reviews.rev_rating) / count(reviews.rev_id) > 10

отсюда.

HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10

с другой стороны возможно 9X_sql и соответствует стандарту SQL. В то время 9X_mysql-query как

HAVING avg_rating > 10

возможно только в MySQL. Это недопустимый 9X_mysqld SQL согласно стандарту, поскольку предложение 9X_having-clause SELECT должно выполняться после HAVING. Из документации 9X_mysql MySQL:

Другое расширение MySQL для стандартного 9X_sql SQL допускает ссылки в предложении HAVING 9X_mysqlclient на выражения с псевдонимами в списке выбора.

Расширение 9X_mysql MySQL позволяет использовать псевдоним в 9X_mysql-server предложении HAVING для агрегированного столбца

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

8
0

Ответ #4

Ответ на вопрос: Можете ли вы использовать псевдоним в предложении WHERE в mysql?

SELECT * FROM (SELECT customer_Id AS 'custId', gender, age FROM customer
    WHERE  gender = 'F') AS c
WHERE c.custId = 100;

9X_mysqld

1
0