Welcome! Everything is fine.

[프로그래머스/Lv.4] 식품분류별 가장 비싼 식품의 정보 조회하기 - MySQL 본문

프로그래머스/SQL

[프로그래머스/Lv.4] 식품분류별 가장 비싼 식품의 정보 조회하기 - MySQL

개발곰발 2024. 3. 29.
728x90

📌 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📌 제출한 오답

찾아보니 이 오답을 제출한 사람들이 많았다. 처음에는 '이게 왜 안되지?' 했는데, CATEGORY별로 묶인 ROW에서 PRODUCT_NAME이 다를 수 있기 때문에 CATEGORY와 PRODUCT_NAME이 매칭되지 않는 문제가 발생한다. 

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

 

실제로 확인해보니 김치를 제외한 모든 카테고리가 원래 테이블의 PRODUCT_NAME과 다른 것을 볼 수 있다.

 

여기서 '맛있는배추김치'를 제외하고 이름이 매칭되지 않는다. '맛있는콩기름'은 '맛있는마조유'로, '맛있는미역국'은 '맛있는김치찌개'로, '맛있는포카칩'은 '맛있는허니버터칩'이 되어야 한다.

📌 정답

다음과 같이 서브쿼리를 이용해 문제를 해결하였다.

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