ror_coding

[Programmers Lv.4] 식품분류별 가장 비싼 식품의 정보 조회하기 - 131116 본문

Algorithm/SQL

[Programmers Lv.4] 식품분류별 가장 비싼 식품의 정보 조회하기 - 131116

ro_rdil_31 2024. 10. 13. 11:11
728x90

간단한 문제라고 생각했는데 GROUP BY 에서의 문제점이 발생하기 때문에 JOIN을 통해 잡아준다.

 

Question

 

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

 

 

Point

 

  • JOIN 에서 SELECT 한 값들을 main table과 연결.
  • -> group by시 PRODUCT_NAME을 랜덤으로 가져오는 것을 방지.

 

Code (After)

 

SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
    FROM (SELECT *
            FROM FOOD_PRODUCT
            WHERE CATEGORY IN ('과자','국','김치','식용유')) P1
    WHERE PRICE = (SELECT MAX(PRICE)
                    FROM FOOD_PRODUCT P2
                    WHERE P1.CATEGORY = P2.CATEGORY)
    ORDER BY 2 DESC

 

Code (Before)

 

SELECT F2.CATEGORY, F2.MAX_PRICE, PRODUCT_NAME
    FROM FOOD_PRODUCT F1
    JOIN (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
            FROM FOOD_PRODUCT
            WHERE CATEGORY REGEXP '과자|국|김치|식용유'
            GROUP BY CATEGORY) AS F2
      ON F1.CATEGORY = F2.CATEGORY AND F1.PRICE = F2.MAX_PRICE
    ORDER BY MAX_PRICE DESC

 

Wrong Code
: Group by 할 때 집계되지 않은 열 (PRODUCT_NAME)을 함께 사용하려고 할 때 정확한 값 가져오지 못 함.

 

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

 

now me

On my github

 

728x90