코딩테스트_MySQL

[MySQL] 프로그래머스 lv4 : 식품분류별 가장 비싼 식품의 정보 조회하기 (GROUP BY, WHERE)

여뉴누 2024. 5. 3. 08:42
728x90
💡GROUP BY를 수행한 뒤 최대값을 추출하면
→ 최대값은 출력되지만, 최대값과 같은 행에 존재하던 값까지 함께 추출되는 것은 아니다. 따라서, 최대값을 따로 추출해주고 최대값과 동일한 값을 가지는 행을 추출해주는 방식이 알맞은 방식

💡WHERE ~ in ~ 구문을 사용할 때, 여러 개의 변수를 지정 가능하다.
EX. WHERE (A, B) in (SELECT ~ FROM ~)

문제 설명

문제

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

 

풀이

<처음 코드>

MAX PRICE를 구하고 & 기존 데이터 프레임에 붙여 구한 MAX PRICE와 기존 데이터 프레임의 가격이 같은 데이터에 대해서만 출력

SELECT fp.CATEGORY, fp.PRICE as MAX_PRICE, fp.PRODUCT_NAME
FROM (SELECT CATEGORY, MAX(PRICE) as maxx
     FROM FOOD_PRODUCT
     WHERE CATEGORY in ('과자', '국', '김치', '식용유')
     GROUP BY CATEGORY) as df RIGHT JOIN FOOD_PRODUCT as fp on df.CATEGORY = fp.CATEGORY
WHERE df.maxx = fp.PRICE
ORDER BY PRICE DESC

 

<수정 코드>

in 문법을 사용할 때 여러 개의 변수가 사용 가능하다는 사실을 몰랐는데, 함께 조건을 줄 수 있다면 이렇게 사용하는 편이 더 맞는 코드라고 생각된다

(1) '과자', '국', '김치', '식용유' 의 카테고리에 해당하는 식품만 추출

(2) 카테고리별 GROUP BY

(3) 카테고리별 최대값, 카테고리를 반환하여 WHERE 구문 처리

(4) 출력

SELECT CATEGORY, PRICE as MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) in (SELECT CATEGORY, MAX(PRICE)
                           FROM FOOD_PRODUCT
                           WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
                           GROUP BY CATEGORY)
ORDER BY PRICE DESC

 

728x90