SQL 고득점 Kit - 7.22

김동현·2024년 7월 22일

SQL 고득점 Kit

목록 보기
7/56

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

문제

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

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

풀이

SELECT 
    fp.CATEGORY,
    MAX_PRICE,
    fp.PRODUCT_NAME
FROM(
    SELECT  
    f.CATEGORY,
    MAX(f.PRICE) AS MAX_PRICE,
    f.PRODUCT_NAME
    FROM
        FOOD_PRODUCT f
    WHERE
        f.CATEGORY = '과자'
    OR
        f.CATEGORY = '국'
    OR
        f.CATEGORY = '김치'
    OR 
        f.CATEGORY = '식용유'
    GROUP BY 
        f.CATEGORY) t1
INNER JOIN 
    FOOD_PRODUCT fp 
ON 
    t1.CATEGORY = fp.CATEGORY
AND 
    t1.MAX_PRICE = fp.PRICE 
ORDER BY 
        MAX_PRICE DESC

리뷰

  • 이번에는 너무 어려웠다. MAX_PRICE를 출력하는 것까지 쉬웠는데 PRODUCT_NAME을 MAX_PRICE와 동일한 레코드에서 출력하는 것에서 막혔다. (제시간에 못 풀고 밤 12시 넘어서 제출을 함...)
  • 만족하는 레코드를 뽑고 싶은데 아무리 생각해도 방법이 떠오르지 않아 인터넷 검색, 서브쿼리를 통해 풀 수 있었다.
  • FROM 절에서 서브쿼리를 통해 CATEGORY를 그룹화하고 최대 금액을 가진 테이블을 생성하여 기존 테이블의CATEGORY와 조인하여 MAX_PRICE와 동일한 금액의 PRODUCT_NAME를 추출할 수 있었다.
  • 아직 서브쿼리를 활용하는 것과 JOIN을 통해 생각을 확장하는 방법이 부족한 것 같다.

GitHub

https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/4/131116.%E2%80%85%EC%8B%9D%ED%92%88%EB%B6%84%EB%A5%98%EB%B3%84%E2%80%85%EA%B0%80%EC%9E%A5%E2%80%85%EB%B9%84%EC%8B%BC%E2%80%85%EC%8B%9D%ED%92%88%EC%9D%98%E2%80%85%EC%A0%95%EB%B3%B4%E2%80%85%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0

초반 풀이

SELECT  
    f.CATEGORY,
    MAX(f.PRICE) AS MAX_PRICE,
    f.PRODUCT_NAME
FROM
    FOOD_PRODUCT f
WHERE
    f.CATEGORY = '과자'
OR
    f.CATEGORY = '국'
OR
    f.CATEGORY = '김치'
OR 
    f.CATEGORY = '식용유'
GROUP BY 
    f.CATEGORY
ORDER BY 
    MAX_PRICE DESC
  • 이렇게 풀면 PRODUCT_NAME가 처음 GROUP BY에서 나온 값으로 나와서 만족하지 않는다.
profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글