복붙노트

[SQL] 당신은 MySQL의에서 WHERE 절에 별칭을 사용할 수 있습니까?

SQL

당신은 MySQL의에서 WHERE 절에 별칭을 사용할 수 있습니까?

나는 WHERE 절에 별칭을 사용해야하지만, 그것은 그것의 알 수없는 열 것을 말해 유지합니다. 이 문제를 해결하기 위해 어떤 방법이 있나요? 나는 더 높은 X보다 등급이 기록을 선택해야합니다. 평가는 다음과 같은 별칭으로 계산된다 :

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

해결법

  1. ==============================

    1.당신은, 예를 들어, 별칭을 볼 수 HAVING 절을 사용할 수 있습니다

    당신은, 예를 들어, 별칭을 볼 수 HAVING 절을 사용할 수 있습니다

     HAVING avg_rating>5
    

    하지만 where 절에 당신은 예를 들어, 표현식을 반복해야합니다

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

    그러나! 모든 표현은 허용됩니다 -하지 작업,이 경우는 HAVING 절을 사용해야합니다 SUM과 같은 집계 함수를 사용하여.

    MySQL의 매뉴얼에서 :

  2. ==============================

    2.몰라 만약이 작품 MySQL의에서뿐만 아니라 그냥 같이 포장 할 수 있습니다 SQLSERVER 사용 :

    몰라 만약이 작품 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 ...
    
  3. ==============================

    3.이 질문은 매우 오래되어 하나의 대답은 이미 160 표를 얻은 ...

    이 질문은 매우 오래되어 하나의 대답은 이미 160 표를 얻은 ...

    그럼에도 불구하고 나는이 명확하게 것 : 문제는 별명이 WHERE 절에 사용할 수 있는지 여부에 대해 사실이 아니다.

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

    집계입니다. WHERE 절에서 우리는 그 값을 보면 테이블에서 우리가 원하는 기록을 제한합니다. 합은, 그러나, 우리는 기록에서 찾을 값없는 (reviews.rev_id) (reviews.rev_rating) 및 계산; 그들은 우리가 단지 기록을 집계 한 후 얻을 값입니다.

    따라서 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은에서만 가능합니다. SELECT 절을 한 후 실행받을 예정대로 그것은 표준에 따라 유효한 SQL하지 않습니다. MySQL의 문서에서 :

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

  4. ==============================

    4.쿼리가 정적 인 경우, 뷰를 쿼리하는 동안 다음 WHERE 절에 그 별칭을 사용할 수있는보기로 정의 할 수 있습니다.

    쿼리가 정적 인 경우, 뷰를 쿼리하는 동안 다음 WHERE 절에 그 별칭을 사용할 수있는보기로 정의 할 수 있습니다.

  5. ==============================

    5.

    SELECT * FROM (SELECT customer_Id AS 'custId', gender, age FROM customer
        WHERE  gender = 'F') AS c
    WHERE c.custId = 100;
    
  6. from https://stackoverflow.com/questions/200200/can-you-use-an-alias-in-the-where-clause-in-mysql by cc-by-sa and MIT license