코딩 테스트/SQL

식품분류별 가장 비싼 식품의 정보 조회하기

susinlee 2024. 12. 12. 10:16

[문제]
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.


[단계별 풀이]
1. 식품분류가 과자, 국, 김치, 식용유인 행들을 필터링한다

2. 식품분류, 가격, 이름을 조회한 후 RANK 윈도우 함수로 식품분류별 가격의 순위를 구해준다

3. 해당 테이블을 인라인뷰로 하여 다시 순위가 1인 행들만 필터링해준다

4. 식품분류, 가격, 이름을 조회한다

5. 가격을 내림차순으로 정렬한다


[정답]

SELECT CATEGORY,
       PRICE AS MAX_PRICE,
       PRODUCT_NAME
FROM 
(
SELECT CATEGORY,
       PRICE,
       PRODUCT_NAME,
       RANK() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RANK_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
) a
WHERE RANK_PRICE = 1
ORDER BY PRICE DESC

 

조인을 활용해서 풀 수도 있다

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

 

쿼리 성능과 관련해서 데이터가 많을 때는 JOIN이 좋고

적을 때(성능차이X)는 윈도우 함수가 간단해서 더 좋다.