문제

WHERE 절에 별칭을 사용해야 하는데 알 수 없는 열이라고 계속 나옵니다.이 문제를 해결할 수 있는 방법이 있나요?x보다 높은 평가를 받은 레코드를 선택해야 합니다.등급은 다음 별칭으로 계산됩니다.

sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
도움이 되었습니까?

해결책

당신은 hading 절을 사용할 수 있습니다 ~할 수 있다 예를 들어 별칭을 참조하십시오

 HAVING avg_rating>5

그러나 Where 조항에서 표현을 반복해야합니다.

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

하지만! 모든 표현식이 허용되는 것은 아닙니다. 합계와 같은 집계 함수를 사용하면 작동하지 않으므로 hown 절을 사용해야합니다.

로부터 MySQL 매뉴얼:

where 절이 실행될 때 열 값이 아직 결정되지 않을 수 있으므로 WHERE 절에서 열 별명을 참조 할 수 없습니다. 보다 섹션 B.1.5.4,“열 별칭 문제”.

다른 팁

Dunno 이것이 MySQL에서 작동하지만 SQLServer를 사용하는 경우 다음과 같이 마무리 할 수도 있습니다.

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

이 질문은 꽤 오래되었으며 한 답변은 이미 160표를 얻었습니다...

그래도 나는 이것을 분명히 하고 싶다:질문은 실제로 ~ 아니다 별칭 이름을 사용할 수 있는지 여부에 대해 WHERE 절.

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

집계입니다.에서 WHERE 절에서 값을 확인하여 테이블에서 원하는 레코드를 제한합니다. sum(reviews.rev_rating) 그리고 count(reviews.rev_id), 그러나 레코드에서 찾은 값은 아닙니다.이는 레코드를 집계한 후에만 얻을 수 있는 값입니다.

그래서 WHERE 부적절합니다.우리는 필요하다 HAVING, 집계 후 결과 행을 제한하려고 하기 때문입니다.그럴 리가 없어

WHERE avg_rating > 10

...도 아니다

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

따라서.

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

반면에 가능하며 SQL 표준을 준수합니다.반면

HAVING avg_rating > 10

MySQL에서만 가능합니다.표준에 따르면 유효한 SQL이 아닙니다. SELECT 절은 다음에 실행되어야합니다 HAVING.MySQL 문서에서:

표준 SQL에 대한 또 다른 MySQL 확장은 HAVING 절의 참조를 선택 목록의 별칭 표현식에 허용합니다.

MySQL 확장은 집계된 열에 대한 HAVING 절에서 별칭 사용을 허용합니다.

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

귀하의 쿼리가 정적 인 경우 뷰를보기로 정의 할 수 있으면 뷰를 쿼리하는 동안 Where 절에서 해당 별칭을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top