[문제]
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)는 윈도우 함수가 간단해서 더 좋다.
'코딩 테스트 > SQL' 카테고리의 다른 글
없어진 기록 찾기 (1) | 2024.12.12 |
---|---|
5월 식품들의 총매출 조회하기 (0) | 2024.12.12 |
즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.12.12 |
모든 레코드 조회하기 (0) | 2024.12.12 |
대여 기록이 존재하는 자동차 리스트 구하기 (1) | 2024.12.12 |