1.GROUP BY
1-1.GROUP BY 사용시 SELECT의 COLUMN들
프로그래머스의 식품 분류별 가장 비싼 식품의 정보 조회하기를 예로 들자.
잘못된 접근.
SELECT
CATEGORY,
MAX(PRICE),
PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치','식용유')
GROUP BY CATEGORY
카테고리를 기준으로 GROUP BY를 했다. SELECT에 CATEGORY와 집계함수 말고는 사용하지 않도록 하자.
이유
GROUP BY를 걸지 않고 실행해봤다. 제일 비싼 과자는 1950원의 허니버터칩이다.
아까 코드 결과다. MAX(PRICE)로 과자 카테고리별 가장 비싼 가격은 1950원인 것을 찾아냈지만
상품 이름이 일치하지 않는다.
GROUP BY는 CATEGORY로만 묶여져 있기 때문에, CATEGORY만 고려된다.
집계함수인 MAX를 사용했을 때는 CATEGORY만 고려 했을 때 묶은 상태로 각 합계를 구해주지만
PRODUCT_NAME은 고려되지 않는다. 그냥 과자중 맨 위에 있는 포카칩을 가져온 것.
우연의 일치로 원하던 결과가 나올 수도 있으니 더 헷갈린다.
정답코드.
SELECT
CATEGORY,
PRICE AS MAX_PRICE,
PRODUCT_NAME
FROM
FOOD_PRODUCT
WHERE
(CATEGORY,PRICE) IN
(
SELECT
CATEGORY,
MAX(PRICE)
FROM
FOOD_PRODUCT
WHERE
CATEGORY IN ("과자","국","김치","식용유")
GROUP BY
CATEGORY
)
ORDER BY 2 DESC
해당 상황에서는 서브쿼리를 활용하자.