꾸물꾸물 졔의 개발공부

[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (WHERE-IN, SubQuery) 본문

알고리즘/SQL

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

체제 2023. 5. 12. 11:37

https://school.programmers.co.kr/learn/courses/30/lessons/131116

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제

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


 

구현 과정

  • 식품분류가 '과자', '국', '김치', '식용유'인 경우만 조회
  • 식품분류 별로 가격이 제일 비싼 식품 찾기 

 

1️⃣ 식품분류가 '과자', '국', '김치', '식용유' 인 경우만 조회 

조회 데이터의 조건이기 때문에 WHERE 절을 사용하여 조건을 추가한다. 조건의 범위가 ('과자', '국', '김치', '식용유') 로 주어져 있기 때문에 IN 연산자를 사용하여 범위 내의 값과 일치하는 데이터를 찾아낸다. 

 

💡IN 연산자 : WHERE 절에서 조건의 범위를 지정하는데에 사용. 값은 콤마(,) 로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가되어진다. 

SELECT *
FROM FOOD_PRODUCT 
WHERE CATEGORY IN ("과자", "국", "김치", "식용유")

 

2️⃣ 식품분류 별로 가격이 제일 비싼 식품 찾기 

식품분류 별로 그룹화 하여 각 그룹별로 가장 비싼 식품의 정보를 조회해야한다. 서브쿼리를 사용해서 각 식품분류 그룹 중 최대 가격을 찾았고, 해당 가격의 값과 일치하는 데이터를 찾기 위해 본 쿼리문에서 WHERE~IN 조건절을 사용하였다. 

 

서브쿼리내에서 그룹별로 최대값을 찾기위해 집계함수인 MAX() 를 사용하여 PRICE 의 최댓값을 찾았다. 

SELECT *
FROM FOOD_PRODUCT 
WHERE PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)

 

👉문제에서 원하는 식품을 찾기 위해선 1️⃣과 2️⃣의 조건을 모두 만족 해야 한다. 식품분류가 ('과자', '국', '김치', '식용유') 에 포함되면서 각 분류별로 최대 가격을 가지는 식품만을 찾아, [식품 분류, 가격, 이름]을 조회한다. WHERE 절 내에 AND 연산자로 두 조건을 묶어, 두 개 모두 만족하는 데이터를 조회.

 


✔️코드

SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT 
WHERE CATEGORY IN ("과자", "국", "김치", "식용유") 
    AND PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)
ORDER BY PRICE DESC;