문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131116
정상 코드.
방법 1. 상관 서브 쿼리 사용
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT F
WHERE CATEGORY IN('과자', '국', '김치', '식용유')
AND
PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT AS S
WHERE S.CATEGORY = F.CATEGORY)
ORDER BY PRICE DESC
방법 2. 윈도우 함수 사용
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN('과자', '국', '김치', '식용유')
AND
PRICE IN (SELECT MAX(PRICE) OVER( PARTITION BY CATEGORY )
FROM FOOD_PRODUCT)
ORDER BY PRICE DESC
방법 2. 윈도우 함수 사용
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM (
SELECT CATEGORY, PRICE, PRODUCT_NAME,
ROW_NUMBER() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RN
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
) INLINE
WHERE RN = 1
ORDER BY PRICE DESC;
내부 동작 순서 (방법2)
1. FROM 절
FOOD_PRODUCT 테이블을 기준으로 데이터를 가져옵니다.
2. WHERE 절
CATEGORY가 '과자', '국', '김치', '식용유' 중 하나이고, PRICE가 카테고리별로 최대 가격과 같은 행들을 필터링합니다.
(서브쿼리(SELECT MAX(PRICE) OVER(PARTITION BY CATEGORY) FROM FOOD_PRODUCT)에서 사용된 MAX() 함수는 각 카테고리 내에서 최대 가격을 찾습니다. 그리고 메인 쿼리에서는 이 결과와 매칭되는 행들을 선택하여 최종 결과를 반환합니다)
3. SELECT 절
필터링된 결과에서 CATEGORY, PRICE, PRODUCT_NAME 컬럼을 선택합니다.
4. ORDER BY 절
PRICE를 기준으로 내림차순으로 정렬합니다.
초기 코드
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
HAVING MAX(PRICE)
ORDER BY PRICE DESC
=>오류 PRODUCT_NAME이 정답과 다르게 출력
1. HAVING 절 이해부족
--> 집계 함수를 기반으로 조건을 걸 때 사용. MAX(FAVORITES)가 어떤 조건과 함께 사용되었어야 함
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 프로그래머스' 카테고리의 다른 글
[SQL KIT] (2024) 입양 시각 구하기(1)(설명/코드/정답) (0) | 2024.01.26 |
---|---|
[SQL KIT] (2024) 년, 월, 성별 별 상품 구매 회원 수 구하기(설명/코드/정답) (0) | 2024.01.26 |
[SQL KIT] (2024) 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(설명/코드/정답) (0) | 2024.01.24 |
[프로그래머스] 깃허브 자동 커밋 연동(2024) (4) | 2024.01.23 |
[SQL KIT] (2024) 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(설명/코드/정답) (0) | 2024.01.22 |