코딩테스트[파이썬]/프로그래머스 sql 고득점 kit

[다시보기]GROUP BY - 식품분류별 가장 비싼 식품의 정보 조회하기

softmoca__ 2024. 2. 23. 20:34
목차

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

 

프로그래머스

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

programmers.co.kr

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

 

 

~~의  ==> 서브 쿼리 

 

정답코드

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='과자' or CATEGORY='국' or CATEGORY='김치' or CATEGORY='식용유' 
)
order by MAX_PRICE desc

 

 

 

 

 

오답으로 가기 쉬운 코드

-- 코드를 입력하세요
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

)  and where  CATEGORY='과자' or CATEGORY='국' or CATEGORY='김치' or CATEGORY='식용유' 
order by MAX_PRICE desc

 

having으로 조건을 필터링 하지 않고  and로 where의 조건을 하나더 붙일 시

 

 

 다음과 같이 작동한다. 

첫 번째 WHERE 절: CATEGORY와 PRICE 조합이 모든 식품 중 최대 가격인 조합을 선택한다. 

두 번째 WHERE 절: CATEGORY가 과자, 국, 김치, 식용유 중 하나인 식품만 선택한다. 

문제점: 두 번째 WHERE 절은 이미 첫 번째 WHERE 절에 의해 선택된 식품에 대해서만 적용된다. 

즉, 첫 번째 WHERE 절에서 선택된 식품 중 CATEGORY가 조건에 맞는 식품만 최종 결과에 포함된다. 

 

 

예시: CATEGORY가 과자이고 PRICE가 1000원인 식품 A가 있다고 가정. 

CATEGORY가 과자이고 PRICE가 2000원인 식품 B가 있다고 가정. 

 

첫 번째 WHERE 절: CATEGORY와 PRICE 조합 중 최대 가격은 (과자, 2000)입니다.

 따라서 식품 B만 선택.

두 번째 WHERE 절: 식품 B는 CATEGORY가 과자이므로 조건에 부합. 

최종 결과: 식품 B만 출력.

하지만 식품 A는 과자 카테고리에서 가장 비싼 식품이기 때문에 결과에 포함되어야 한다.