본문 바로가기
프로그래머스/SQL

MAX() 함수 [프로그래머스] Lv.2 가격이 제일 비싼 식품의 정보 출력하기.MySQL

by 몰라닉네임 2024. 9. 9.

 

문제

[프로그래머스] Lv.2 가격이 제일 비싼 식품의 정보 출력하기.MySQL

 

출처

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 

아무생각없이 풀면 틀리기 좋은 문제임 

 

SQL에서 데이터를 조회할 때, 특히 최대값을 찾는 경우 두 가지 주요 쿼리 방식이 있습니다. 오늘은 MAX() 함수를 사용하는 두 가지 방법의 차이점에 대해 알아보고, 그 차이를 이해하는 것이 왜 중요한지 설명드리겠습니다. 

 

 

1. 첫 번째 쿼리: MAX() 함수 단독 사용

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, MAX(PRICE) AS "PRICE"
FROM FOOD_PRODUCT;

이 쿼리는 매우 단순해 보입니다. FOOD_PRODUCT 테이블에서 PRICE 열의 최대값을 찾고, 그 값을 다른 열과 함께 반환하려는 의도인 것처럼 보입니다. 하지만 주의할 점은, MAX(PRICE)는 집계 함수라는 것입니다. 집계 함수는 특정 열의 데이터만 계산하며, GROUP BY 없이 다른 열들과 함께 사용할 경우 해당 열의 값들은 제대로 반환되지 않습니다.

 

동작 방식

  • MAX(PRICE)는 테이블 전체에서 가격의 최댓값을 반환합니다.
  • 하지만 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY 등의 다른 열에 대한 명시적인 그룹화(GROUP BY)가 없기 때문에, 이들 열의 값은 무의미해지거나 불완전한 결과가 됩니다.

 

2. 두 번째 쿼리: 서브쿼리와 MAX() 함수 활용

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

 

이 쿼리는 앞서 언급한 문제를 해결하는 방법입니다. 여기서는 서브쿼리를 사용하여 PRICE의 최댓값을 구한 다음, 그 값에 해당하는 제품 정보를 조회합니다. 서브쿼리에서 최대 가격을 얻고, 그 값을 메인 쿼리의 WHERE 조건으로 사용하여 최댓값을 가진 제품의 전체 행을 반환합니다.

동작 방식

  • 서브쿼리 SELECT MAX(PRICE) FROM FOOD_PRODUCT는 PRICE의 최댓값을 반환합니다.
  • 메인 쿼리는 이 값을 WHERE 조건에서 사용하여 최댓값을 가진 행을 찾습니다.
  • 결과적으로, 최댓값을 가진 제품의 모든 정보 (PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE)를 얻을 수 있습니다.

언제 각각의 쿼리를 사용할까?

  • 첫 번째 쿼리는 단순히 특정 열의 최대값만 필요할 때 사용하면 됩니다. 예를 들어, "최대 가격이 얼마인지?"만 알고 싶을 때 적합합니다.
  • 두 번째 쿼리는 최대값을 가진 데이터의 다른 정보가 필요할 때 사용해야 합니다. 예를 들어, "최대 가격을 가진 제품이 무엇인지?"를 알고 싶다면 이 방법이 적절합니다.