지우너

[프로그래머스 SQL 고득점 Kit] GROUP BY 본문

Problem Solving

[프로그래머스 SQL 고득점 Kit] GROUP BY

지옹 2025. 1. 17. 08:21

 

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

더보기

정답 코드

-- FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회
# 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력
# 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (
    SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
    GROUP BY CATEGORY
)
ORDER BY MAX_PRICE DESC

 

실패했던 코드

-- FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회
# 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력
# 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC

 

실패 원인:

 

MAX(PRICE)는 그룹 내에서 가장 높은 가격을 계산 → CATEGORY별로 계산됨

문제는 PRODUCT_NAME. MAX(PRICE)로 그룹화하면서 해당 그룹에 속하는 제품 중 어떤 PRODUCT_NAME이 가장 높은 가격과 연결되어야 하는지 명확하지 않음.

⇒ 서브쿼리를 이용하여, 카테고리별 MAX_PRICE를 계산하고, 해당 카테고리, MAX_PRICE와 일치하는 컬럼을 찾는다.

 

 

조건에 맞는 사용자와 총 거래금액 조회하기

더보기

내가 푼 코드

-- USED_GOODS_BOARD와 USED_GOODS_USER 테이블
# 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회
# 결과는 총거래금액을 기준으로 오름차순 정렬
WITH VIP_USER AS(
    SELECT WRITER_ID AS USER_ID, SUM(PRICE) AS TOTAL_SALES
    FROM USED_GOODS_BOARD
    WHERE STATUS='DONE'
    GROUP BY WRITER_ID
    HAVING SUM(PRICE)>=700000
)

SELECT USER_ID, NICKNAME, TOTAL_SALES
FROM VIP_USER
JOIN USED_GOODS_USER USING(USER_ID)
ORDER BY TOTAL_SALES ASC