Можете ли вы использовать псевдоним в предложении 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
Ответ #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”.
- Если я повторяю это выражение, оно говорит мне: «недопустимое использо ...
Ответ #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 ...
Ответ #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
Ответ #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
-
7
-
3
-
1
-
3
-
3
-
3
-
4
-
9
-
4
-
2
-
2
-
13
-
5
-
1
-
1
-
4
-
3
-
4
-
9
-
1
-
2
-
3
-
1
-
12
-
2
-
25
-
4
-
3
-
28
-
13
-
11
-
8
-
3
-
17
-
6
-
3
-
25
-
6
-
4
-
13
-
18
-
16
-
5
-
12
-
3
-
2
-
4
-
5
-
13