https://school.programmers.co.kr/learn/courses/30/lessons/131116
습득한점:
*** LIMIT은 서브쿼리에 들어가면 쿼리 실행자체가 안된다는 점
*** GROUP BY된 상태로 SELECT 함수 인자로 MAX func 활용할 때,
각 그룹의 첫번째 값이 끌려올 뿐, MAX func가 적용되지 않는 점
문제:
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 쿼리작성.
이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력.
결과는 식품 가격을 기준으로 내림차순 정렬.
문제파악:
각 카테고리(식품분류)에서 최대값을 나타내는 식품명(PRODUCT_NAME)을 찾아야 하는데,
'면' 그룹내 PRICE 값이 같은 항목이 존재함. 그룹별 최대값으로서 PRICE 값은 4950원으로 서로 같지만, 식품명은 다른 상황.
"이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력" 라는 조건이 없었다면, 이 문제는 잘못 설계된 문제
풀이:
처음에는 고유값 PRODUCT_ID를 활용해서 PRICE 값 기준 내림차순 정렬하여 첫번째 값만 찾은 뒤,
그렇게 찾은 PRODUCT_ID를 WHERE 절에 활용하고 싶었지만...
서브쿼리에는 LIMIT 를 사용할 수 없더라.
LIMIT을 억지로 감싸는 방법이 있는 것 같지만, 코드 가독성이 안좋을 것 같다.
결국 그룹별 PRICE 최대값을 찾아, 이를 조건에 넣어 매칭시키기로 했다.
각 식품분류(CATEGORY)별 MAX(PRICE) 값만 추출 후,
이를 첫번째 일치 조건으로 활용하기 위해 서브쿼리로 감싸서 WHERE 구문에 삽입
두번째 식품분류 일치 조건은 AND CATEGORY IN ( '과자', '국', 김치', '식용유' ) 으로 엮여주기
조건1: 추출한 MAX(PRICE)값이 FOOD_PRODUCT 테이블의 PRICE 값과 같은지
조건2: 식품 분류가 '과자', '국', '김치', '식용유' 해당하는지
마지막으로 내림차순 쿼리까지 잘 작성해주면 된다.
SELECT CATEGORY
,PRICE AS MAX_PRICE
,PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE PRICE IN
(
SELECT MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY
)
AND CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY MAX_PRICE DESC
'sql > easy' 카테고리의 다른 글
Leetcode 262 - Trips and Users (0) | 2023.09.01 |
---|---|
프로그래머스 Lv 4 - 보호소에서 중성화한 동물 (Lv 4 문제 마지막) (0) | 2023.08.16 |
프로그래머스 Lv 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.07.19 |
프로그래머스 Lv 4 - 5월 식품들의 총매출 조회하기 (0) | 2023.07.18 |
프로그래머스 Lv 4 - 서울에 위치한 식당 목록 출력하기 (0) | 2023.07.14 |