프로그래머스_SQL_오답노트_WHERE, 집계함수, 서브쿼리

HEE·2025년 3월 12일
2

프로그래머스 SQL

목록 보기
7/13
post-thumbnail

프로그래머스 SQL 고득점 KIT, SUM, MAX, MIN

Level 2. 가격이 제일 비싼 식품의 정보 출력하기

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

정답 확인

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)

어려웠던 부분

  • WHERE절에서 집계함수 서브쿼리 의 사용 주의!
  1. SELECT절에서 집계함수 사용
SELECT PRODUCT_ID, MAX(PRICE)
FROM FOOD_PRODUCT;
  • 틀린 이유
    MAX(PRICE)
    : 집계함수
    : 단일값을 반환하지만, 테이블 전체에서 계산됨
    PRODUCT_ID 와 같은것들은 개별 행 데이터
    개별행 데이터와 MAX(PRICE)
    SQL이 어떤 PRODUCT_ID (EX. A,B,C,D,..) 와 MAX(PRICE)를 비교해야할지 모름.
  1. WHERE절에서 집계함수 사용
SELECT PRODUCT_ID, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = MAX(PRICE);
  • 틀린 이유
    WHERE절에서는 각 행단위 조건 비교해야함.
    PRICE (개별행)과 MAX(PRICE) (테이블 전체 값)을 비교할 수 없음.

무엇보다 WHERE절에서 서브쿼리없이 집계함수 사용 불가!!

그럼 정답은 왜 정답인가

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
  1. SELECT MAX(PRICE) FROM FOOD_PRODUCT 최대 가격 단일값 반환 EX. 1,000원.
  2. WHERE PRICE = 1000 각 행의 PRICE와 비교 가능.
  3. WHERE 개별행과 단일값을 비교 가능! 오류 없음.
profile
ALL IS WELL

0개의 댓글