TobeSteady

[GROUP BY] Unknown column 'MAX_PRICE' in 'IN/ALL/ANY subquery' 본문

Languages/SQL

[GROUP BY] Unknown column 'MAX_PRICE' in 'IN/ALL/ANY subquery'

NKUT 2023. 3. 15. 15:50

프로그래머스 : 식품분류별 가장 비싼 식품의 정보 조회하기

    문제

    FOOD_PRODUCT 테이블에서 
    식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 
    이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 
    결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

     

    오답

    SELECT CATEGORY, PRICE MAX_PRICE, PRODUCT_NAME
    FROM FOOD_PRODUCT
    WHERE (CATEGORY, MAX_PRICE) IN (
        SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
        FROM FOOD_PRODUCT
        WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
        GROUP BY CATEGORY
    )

    SQL 실행 중 오류가 발생하였습니다.
    Unknown column 'MAX_PRICE' in 'IN/ALL/ANY subquery'

     

     

    How do I use alias in where clause?

    Possible Duplicate: Referring to a Column Alias in a WHERE Clause SELECT Trade.TradeId, Isnull(Securities.SecurityType,'Other') SecurityType, TableName, CASE WHEN SecurityTrade.SecurityId I...

    stackoverflow.com

     

    MySQL :: MySQL 8.0 Reference Manual :: B.3.4.4 Problems with Column Aliases

    B.3.4.4 Problems with Column Aliases An alias can be used in a query select list to give a column a different name. You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column: SELECT SQRT(a*b) AS root FROM tbl_name GROUP BY root

    dev.mysql.com

    Standard SQL disallows references to column aliases in a WHERE clause.
    > 표준 SQL은 WHERE절에서 열 별칭에 대한 참조를 허용하지 않는다.
    This restriction is imposed because
    when the WHERE clause is evaluated, the column value may not yet have been determined.
    > 이 제한은 WHERE절이 평가될 때 열 값이 아직 결정되지 않을 수 있기 때문에 적용된다.

    SQL 구문 순서 : FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

     

     

    MySQL

    SELECT CATEGORY, PRICE MAX_PRICE, PRODUCT_NAME
    FROM FOOD_PRODUCT
    WHERE (CATEGORY, PRICE) IN (
        SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
        FROM FOOD_PRODUCT
        WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
        GROUP BY CATEGORY
    )
    ORDER BY MAX_PRICE DESC