테이블에 대한 설명과 문제가 나와있습니다.
얼핏 보면 쉬운 문제 같지만, 계속 틀렸다고 나와서 머리가 아팠던 문제입니다 🥺
처음 작성한 쿼리
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