코딩테스트_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