코딩테스트/SQL 코딩테스트
<프로그래머스> 식품분류별 가장 비싼 식품의 정보 조회하기
배또가또
2023. 12. 21. 13:29
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 요구사항
- FOOD_PRODUCT 테이블에서 식품 분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL 작성
- 이 때 식품 분류가 과자, 국, 김치, 식용유인 경우만을 출력
- 결과는 식품가격을 기준으로 내림차순 정렬
1) Oracle
SELECT CATEGORY,
PRICE,
PRODUCT_NAME
FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) RN, F.*
FROM FOOD_PRODUCT F
)
WHERE RN = 1 AND
CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY 2 DESC;
이전에 풀었던 문제(https://jinhyunbae.tistory.com/66)와 마찬가지로 아래의 MySQL 코드를 문법에 맞추어 똑같이 실행했을 때 GROUP BY 오류가 났다. 따라서 동일하게 서브쿼리와 ROW_NUMBER() 윈도우함수를 이용하여 해결하였다.
2) MySQL
SELECT CATEGORY,
PRICE,
PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
AND PRICE IN (SELECT MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY)
GROUP BY CATEGORY
ORDER BY 2 DESC;
MySQL의 경우에는 WHERE절 조건에 서브쿼리를 작성하여서 가장 가격이 비싼 식품 카테고리를 출력하였고 이를 가격과 비교하고 GROUP BY 하는 것으로 문제를 해결하였다.