https://school.programmers.co.kr/learn/courses/30/lessons/131116
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는 과자 카테고리에서 가장 비싼 식품이기 때문에 결과에 포함되어야 한다.
'코딩테스트[파이썬] > 프로그래머스 sql 고득점 kit' 카테고리의 다른 글
GROUP BY - 동명 동물 수 찾기 (0) | 2024.02.23 |
---|---|
GROUP BY - 고양이와 개는 몇 마리 있을까 (0) | 2024.02.23 |
GROUP BY - 성분으로 구분한 아이스크림 총 주문량 (0) | 2024.02.23 |
GROUP BY - 진료과별 총 예약 횟수 출력하기 (0) | 2024.02.23 |
[다시보기]GROUP BY - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.02.23 |