SQL

[MySQL] 프로그래머스 문제 풀이 (식품분류별 가장 비싼 식품의 정보 조회하기)

초이준철 2024. 8. 16. 17:34

테이블 설명 및 문제

테이블에 대한 설명과 문제가 나와있습니다.

얼핏 보면 쉬운 문제 같지만, 계속 틀렸다고 나와서 머리가 아팠던 문제입니다 🥺

 

처음 작성한 쿼리
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('식용유', '과자', '국', '김치')
GROUP BY CATEGORY
ORDER BY MAX(PRICE) DESC;

 

쿼리에 대한 결괏값 (오답값)

 


무엇이 틀렸는지 한 번 확인해 볼게요.

우선, 아래는 아무런 CATEGORY만 필터링하고 다른 조건은 아무것도 주지 않은 결괏값이에요.

그리고 빨간색 네모박스들만 출력되면 정답인 샘이죠.

 

무엇이 틀렸는지 감이 오시나요?

 

추출되어야 할 결괏값과 제가 짠 쿼리에 대한 결괏값을 비교해 보면

PRODUCT_NAME에 대한 값이 다르다는 것을 알 수 있어요.

 

그 이유는 CATEGORY로 GROUP BY 한 뒤 SELECT에 MAX 함수를 사용할 때

MAX(PRICE) 값은 올바르게 나오고, 다른 CATEGORY 칼럼과 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 IN ('과자', '국', '식용유', '김치')
      		GROUP BY CATEGORY)
ORDER BY MAX_PRICE DESC;

 

카테고리와 금액은 확실하게 매치가 되지만 문제는 '제품 이름'이 매치가 안 되는 것이죠?

조건에 맞는 카테고리와 금액만 서브쿼리로 만든 뒤, WHERE 조건문을 통해서 FOOD_PRODUCT 테이블과 같은 가격을 추출하도록 설정하면 원하는 결괏값을 얻을 수 있어요.

 

 

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131116?language=mysql 

 

프로그래머스

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

programmers.co.kr