본문 바로가기

코딩테스트/SQL

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

https://school.programmers.co.kr/learn/courses/30/lessons/131116

 

프로그래머스

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

programmers.co.kr

 

1. 첫번째 시도 (오답)

저는 CATEGORY로 GROUPBY한다면 MAX_PRICE와 PRODUCT_NAME까지 올바르게 집계될줄 알았습니다

하지만 PRODUCT_NAME이 MAX_PRICE에 해당하는 데이터가 아닌 첫번째 데이터가 집계됩니다

아래 사진으로 예시를 들면 식용유, 8950, 맛있는콩기름 이지만 실제로는 식용유, 8950, 맛있는마조유 여야 합니다

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

 

2. 두번째 시도 (정답)

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

 

3. 세번째 시도 (정답)

쿼리를 간결하게 하기 위해 JOIN이 아닌 WHERE문으로 처리했습니다

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