[알고리즘] 식품분류별 가장 비싼 식품의 정보 조회하기
2023. 10. 5. 13:20ㆍ알고리즘 풀이/SQL
문제 설명
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.
Column name Type Nullable
PRODUCT_ID VARCHAR(10) FALSE
PRODUCT_NAME VARCHAR(50) FALSE
PRODUCT_CD VARCHAR(10) TRUE
CATEGORY VARCHAR(10) TRUE
PRICE NUMBER TRUE
문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
예시
FOOD_PRODUCT 테이블이 다음과 같을 때
PRODUCT_ID PRODUCT_NAME PRODUCT_CD CATEGORY PRICE
P0018 맛있는고추기름 CD_OL00008 식용유 6100
P0019 맛있는카놀라유 CD_OL00009 식용유 5100
P0020 맛있는산초유 CD_OL00010 식용유 6500
P0021 맛있는케첩 CD_SC00001 소스 4500
P0022 맛있는마요네즈 CD_SC00002 소스 4700
P0039 맛있는황도 CD_CN00008 캔 4100
P0040 맛있는명이나물 CD_CN00009 캔 3500
P0041 맛있는보리차 CD_TE00010 차 3400
P0042 맛있는메밀차 CD_TE00001 차 3500
P0099 맛있는맛동산 CD_CK00002 과자 1800
SQL을 실행하면 다음과 같이 출력되어야 합니다.
CATEGORY MAX_PRICE PRODUCT_NAME
식용유 6500 맛있는산초유
과자 1800 맛있는맛동산
나의 풀이
- 쿼리를 하나만 쓰기에는 최고가의 product_name을 가져올 수가 없는 문제가 생긴다.
- 이를 해결하기 위해 서브 쿼리를 만들어 키 값이 될 수 있는 category와 max(price)만 찾아 비교하여 최종 선별하는 작업을 거친다.
- 만약 max(price)만 사용하게 될 경우 중복된 값이 존재할 수 있고 만약 이 값이 해당 category내에 최고가가 아닌 값이라면 틀리는 문제가 생긴다. 따라서 category와 max(price)를 함께 써야 한다.
- in 을 쓰기 위해서는 []와 같이 리스트가 아닌 튜플 형식을 사용해야 한다.
- price를 프로그래머스의 열 이름인 max_price와 동등하게 맞추어 주지 않았다. 이런 것도 이제는 신경쓰자!!!
select category, price, product_name from food_product
where (category, price) in (
select category, max(price) as max_price from food_product
where category in ('과자', '국', '김치', '식용유')
group by category
)
order by price desc
'알고리즘 풀이 > SQL' 카테고리의 다른 글
[알고리즘][X] 입양 시각 구하기(2) (1) | 2023.10.06 |
---|---|
[알고리즘][X] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.10.05 |
[알고리즘] 저자 별 카테고리 별 매출액 집계하기 (1) | 2023.10.05 |
[알고리즘] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.10.05 |
[알고리즘][X] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (1) | 2023.10.04 |