꾸물꾸물 졔의 개발공부
[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (WHERE-IN, SubQuery) 본문
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;
'알고리즘 > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (GROUP BY, DATE_FORMAT, DISTINCT) (0) | 2023.05.16 |
---|---|
[MySQL] 프로그래머스 - 서울에 위치한 식당 목록 출력하기 (JOIN, GROUP BY, LIKE, ROUND 반올림) (0) | 2023.05.15 |
[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기 (JOIN, DATE, GROUP BY, SUM) (0) | 2023.05.11 |
[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (JOIN, String, LIKE) (0) | 2023.05.10 |
[MySQL] 프로그래머스 - 없어진 기록 찾기 (OUTER JOIN) (0) | 2023.05.02 |