본문 바로가기
코딩테스트/programming_SQL

[SQL] 식품분류별 가장 비싼 식품의 정보 조회하기_131116

by prometedor 2023. 11. 17.

IN, 서브쿼리, GROUP BY 이용

FOOD_PRODUCT 테이블에서 특정 카테고리의 제품 중 가장 높은 가격을 가진 제품에 대한 정보를 검색하도록 함

WHERE (컬럼1, 컬럼2) IN // 서브쿼리에서 반환된 결과와 매칭되는 행 선택
	( 
        SELECT 컬럼1, MAX(컬럼2) // 각 카테고리별로 최대 가격을 찾는 서브쿼리
        FROM 테이블명 
        GROUP BY 컬럼1 
        HAVING 컬럼1 IN ('컬럼1의 값1', '컬럼1의 값2', '컬럼1의 값3', ...) // CATEGORY가 '과자', '국', '김치', '식용유' 중 하나인 카테고리만을 대상으로 함
    ) 
=> 필터링 조건을 지정

GROUP BY 컬럼1: 결과를 컬럼1 열을 기준으로 그룹화
ㄴ 이는 서브쿼리에서 각 컬럼1 별 최대값을 찾기 위해 사용됨

=> '컬럼1의 값1', '컬럼1의 값2', '컬럼1의 값3', ... 중 각 컬럼1 별로 최대값을 가진 제품의 정보를 검색하고, 그 결과를 최대값을 기준으로 내림차순으로 정렬하여 반환

 

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

 

프로그래머스

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

programmers.co.kr

 

 

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

 

 

아래와 같이 PRICE 대신 2 라고 하여 2번째 검색 값으로 정렬한다고 하여 ORDER BY 2  를 이용할 수도 있음

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