[SQL] 가격이 제일 비싼 식품의 정보 출력하기

유지민·2024년 3월 4일

SQL

목록 보기
15/23
post-thumbnail

문제 보기

문제 설명

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 의미합니다.

Column name	Type	Nullable
PRODUCT_ID	VARCHAR(10)	FALSE
PRODUCT_NAME	VARCHAR(50)	FALSE
PRODUCT_CD	VARCHAR(10)	TRUE
CATEGORY	VARCHAR(10)	TRUE
PRICE	NUMBER	TRUE

문제

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

예시

FOOD_PRODUCT 테이블이 다음과 같을 때

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

SQL을 실행하면 다음과 같이 출력되어야 합니다.

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

정답 코드

SELECT * FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)

오답 코드

SELECT * FROM FOOD_PRODUCT
WHERE MAX(PRICE)

서브쿼리의 사용 : WHERE절에서 바로 집계함수 사용 X

  • SQL에서 WHERE를 통해 특정 조건에 맞는 행을 필터링할 때, 해당 조건은 각 행에 대해 평가될 수 있는 표현식이어야 함

  • SELECT MAX(PRICE) FROM FOOD_PRODUCT : 와 같은 서브쿼리를 사용하는 이유 :

    • 가격이 가장 높은 물품을 찾기 위해 전체 FOOD_PRODUCT 테이블에서 최대 가격을 먼저 계산하고, 그 결과를 사용하여 조건에 맞는 행을 필터링하기 위함
  • SELECT * FROM FOOD_PRODUCT WHERE MAX(PRICE)가 틀린 이유 :

    • MAX와 같은 집계 함수는 WHERE 절에서 직접 사용될 수 없음
    • WHERE 절은 각 행에 대해 평가됨
      • 집계 함수는 여러 행의 값을 요약하여 단일 값으로 계산하기 때문에, WHERE 절에서는 사용할 수 없음
      • 대신 GROUP BY나 HAVING 절에서 사용될 수 있음
  • SELECT MAX(PRICE) FROM FOOD_PRODUCT와 같은 서브쿼리를 사용하여 최대 가격을 계산

    • 이 값을 WHERE 절의 조건으로 사용해 해당 가격에 해당하는 행을 필터링해야 함
profile
끊임없이 도전하며 사고하는 주니어 Web 개발자 유지민입니다.

0개의 댓글