Eu preciso usar um alias na cláusula WHERE, mas continua me dizendo que é uma coluna desconhecida. Existe alguma maneira de contornar esse problema? Preciso selecionar registros com uma classificação maior que x. A classificação é calculada como o seguinte alias:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
fonte
HAVING
executado depois que os dados são buscados eWHERE
antes.Não sei se isso funciona no mysql, mas usando o sqlserver, você também pode envolvê-lo como:
fonte
Esta pergunta é bastante antiga e uma resposta já obteve 160 votos ...
Ainda assim, eu deixaria isso claro: na verdade, a questão não é se nomes de alias podem ser usados na
WHERE
cláusula.é uma agregação. Na
WHERE
cláusula, restringimos os registros que queremos das tabelas observando seus valores.sum(reviews.rev_rating)
ecount(reviews.rev_id)
, no entanto, não são valores que encontramos em um registro; são valores que só obtemos após agregar os registros.Então
WHERE
é inapropriado. PrecisamosHAVING
, pois queremos restringir as linhas de resultados após a agregação. Não pode sernem
conseqüentemente.
por outro lado, é possível e está em conformidade com o padrão SQL. Enquanto que
só é possível no MySQL. Não é um SQL válido de acordo com o padrão, pois a
SELECT
cláusula deve ser executada depoisHAVING
. Nos documentos do MySQL:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
fonte
Se sua consulta for estática, você poderá defini-la como uma visualização, e poderá usar esse alias na cláusula where enquanto estiver consultando a visualização.
fonte
fonte