해당 문제는 여기에서 확인하실 수 있습니다.
- 이해 시간(문제 확인 ~ 첫 쿼리 작성 시점): 15분
- 해결 시간(첫 쿼리 시도 ~ 문제 정답 확인): 45분
- 코드 시도 횟수: 5회
주어진 문제는 식품 정보 테이블에서 특정 카테고리별 최고가 제품을 찾는 것입니다. 전체 테이블에서 과자, 국, 김치, 식용유 카테고리의 제품들을 필터링하고, 각 카테고리에서 가장 높은 가격의 제품을 찾아야 합니다.
카테고리별로 데이터를 그룹화하고 그룹 내 최대 가격을 찾기 위해 GROUP BY를 사용하며, 특정 카테고리 필터링은 그룹화 이후에 적용되어야 하므로 HAVING 절을 사용합니다. 최종 결과는 가격 기준 내림차순으로 정렬되어야 하며, GROUP_CONCAT과 SUBSTRING_INDEX를 조합하여 각 그룹의 최대 가격에 해당하는 제품명을 함께 표시할 수 있습니다.
이때 MySQL의 GROUP BY 규칙에 따라 SELECT 절의 모든 컬럼은 그룹화되거나 집계함수가 적용되어야 하며, 정렬은 집계된 MAX_PRICE를 기준으로 해야 합니다.
-- 코드 실행 순서: FROM → GROUP BY → HAVING → SELECT → ORDER BY
-- 1. FROM: FOOD_PRODUCT 테이블에서 데이터를 가져옴
SELECT
CATEGORY, -- 3-1. 카테고리 선택
MAX(PRICE) AS MAX_PRICE, -- 3-2. 각 그룹의 최대 가격을 구함
-- 3-3. 각 그룹 내에서 가격이 높은 순으로 정렬된 제품명 중 첫 번째 값만 선택
SUBSTRING_INDEX(
GROUP_CONCAT(
PRODUCT_NAME ORDER BY PRICE DESC
),
',',
1
) AS PRODUCT_NAME
FROM FOOD_PRODUCT
-- 2. 카테고리별로 그룹화
GROUP BY CATEGORY
-- 3. 그룹화된 결과에서 특정 카테고리만 필터링
HAVING CATEGORY IN ('과자', '국', '김치', '식용유')
-- 4. 최대 가격 기준으로 내림차순 정렬
ORDER BY MAX_PRICE DESC