[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- Lv4의 문제
- 식품 정보를 담은 FOOD_PRODUCT 테이블에서 식품분류(CATEGROY)별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회
- 식품분류가 '과자', '국', '김치', '식용유' 인 경우만 출력
- 식품 가격을 기준으로 내림차순 정렬
문제 풀이
◼️ category 별로 그룹화해서 가격이 제일 비싼 식품의 카테고리, 가격 조회 → MAX_PRODUCT
- IN 연산자로 CATEGORY가 '과자', '국', '김치', '식용유' 인 식품만 조회
◼️ FOOD_PRODUCT와 MAX_PRODUCT 테이블 join
- MAX_PRODUCT의 MAX_PRICE와 FOOD_PRODUCT의 PRICE가 같은 식품의 정보를 조회
전체코드
WITH MAX_PRODUCT AS (
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
)
SELECT F.CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT F JOIN MAX_PRODUCT M
ON F.CATEGORY = M.CATEGORY
WHERE F.PRICE = M.MAX_PRICE
ORDER BY 2 DESC;
✔️ 실패한 풀이
아래와 같이 CATEGORY로 그룹화한 후 MAX 함수로 가격이 가장 비싼 것을 조회하면,
해당 카테고리의 최고 가격은 구할 수 있지만, 상품명은 은 그 최고 가격과 일치하는 상품명이 아니라 그룹 내 임의의 상품명이 나올 수 있다.
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC;
'PS > SQL' 카테고리의 다른 글
[프로그래머스][SQL] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.06.25 |
---|---|
[프로그래머스][SQL] 연도별 대장균 크기의 편차 구하기 (0) | 2024.06.19 |
[프로그래머스][SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.06.19 |
[프로그래머스][SQL] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (1) | 2024.06.18 |
[프로그래머스][SQL] 조건에 부합하는 중고거래 상태 조회하기 (1) | 2024.06.18 |