CODING TEST/MySQL

Lv2 - 가격이 제일 비싼 식품의 정보 출력하기

iamyuunzo 2025. 7. 21. 13:34

📌 문제 정보

- 문제 이름 : 프로그래머스 - (SUM, MAX, MIN) 가격이 제일 비싼 식품의 정보 출력하기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131115

 

 

 

📌 문제 요약

- FOOD_PRODUCT 테이블 : PRODUCT_ID(식품 ID), PRODUCT_CD(식품 이름), CATEGORY(식품 분류), PRICE(식품 가격)

- FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품 분류, 식품 가격을 조회하는 SQL문 작성

 

예시)

PRODUCT_ID  PRODUCT_NAME  PRODUCT_CD  CATEGORY  PRICE
P0018  맛있는고추기름  CD_OL00008  식용유  6100
P0019  맛있는카놀라유  CD_OL00009  식용유  5100
P0020 맛있는산초유  CD_OL00010  식용유  6500
P0021  맛있는케첩  CD_OL00001  소스  4500
P0022  맛있는마요네즈  CD_OL00002  소스  4700

 

출력)

PRODUCT_ID  PRODUCT_NAME  PRODUCT_CD CATEGORY  PRICE
P0020  맛있는산초유 CD_OL00010  식용유  6500

 

 

 

📌 내 풀이 및 코드

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE 
FROM FOOD_PRODUCT
ORDER BY PRICE DESC		-- PRICE를 기준으로 내림차순 (=가장 비싼 순)
LIMIT 1;				-- 맨 위 1개의 행만 가져옴

- MAX로 풀었었는데 그걸 활용하려면 서브쿼리 개념을 알아야 했음. 근데 몰라서 힌트를 받고 다른 방식으로 제출함.

 

** 서브쿼리 방식의 답 **

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE	-- 메인쿼리
FROM FOOD_PRODUCT
WHERE PRICE = (
    SELECT MAX(PRICE)		-- 서브쿼리 : 테이블 전체에서 가장 큰 가격값 구함
    FROM FOOD_PRODUCT
);

 

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** 서브쿼리 (Subquery) **

- () 안에 들어있는 SELECT문을 서브쿼리라고 함.

- 하나의 값 or 행/열을 반환하고 WHERE(가장 많이 씀), FROM(인라인 뷰 or 파생 테이블), SELECT절(드물다) 어디든 들어갈 수 있음.

-- 기본 문법
SELECT ...
FROM 테이블
WHERE 컬럼 = (
    SELECT ...
    FROM 다른_또는_같은_테이블
    WHERE ...
);

-- 1. WHERE 절에서 쓰는 서브쿼리
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (
    SELECT MAX(PRICE)	-- 가격 최대값 반환
    FROM FOOD_PRODUCT
);

-- 2. FROM절에서 쓰는 서브쿼리
SELECT avg_table.CATEGORY, avg_table.AVG_PRICE
FROM (
    SELECT CATEGORY, AVG(PRICE) AS AVG_PRICE
    FROM FOOD_PRODUCT
    GROUP BY CATEGORY
) AS avg_table;

-- 3. SELECT절에서 쓰는 서브쿼리
SELECT 
    PRODUCT_ID,
    PRODUCT_NAME,
    (SELECT MAX(PRICE) FROM FOOD_PRODUCT) AS MAX_PRICE
FROM FOOD_PRODUCT;