SUM, MAX, MIN > 가격이 제일 비싼 식품의 정보 출력하기
Post

SUM, MAX, MIN > 가격이 제일 비싼 식품의 정보 출력하기

안녕하세요~👋

오늘도 공부하는 무럭무럭 ✨성장몬✨ 입니다.


저는 처음에 이 문제를

MySQL 은 ORDER BY 와 LIMIT 을 사용해서 풀었고,

1
2
3
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT 
ORDER BY PRICE DESC LIMIT 1

오라클은 서브쿼리와 ROWNUM 을 이용해서 풀었는데요!

1
2
3
4
5
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM (SELECT *
     FROM FOOD_PRODUCT 
     ORDER BY PRICE DESC)
WHERE ROWNUM = 1;


이렇게 풀게 되면 제일 비싼 식품의 가격이 같은 ROW가 있으면

정확한 답을 찾을 수 없어요!

(이 문제에서는 이렇게해도 정답이지만)


빅오표기법으로 시간복잡도를 나타냈을 때

MAX 는 O(n) 이고, ORDER BY 는 정렬이라 O(nlogn) 인데

시간복잡도를 따졌을 때에도 제가 푼 방법은 최고 좋은 방법이라고는 할 수 없겠습니다.


저는 이렇게 정답만 맞으면 행복해하는데

이런 거까지 고려하는 분들도 계시니…

더 열심히 해야겠어요!

이렇게 다른 분들 풀이와 댓글들 보면서 또 한 번 성장합니다♥


같이 성장하고 싶다면~?



📝 문제 설명

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

Column nameTypeNullable
PRODUCT_IDVARCHAR(10)FALSE
PRODUCT_NAMEVARCHAR(50)FALSE
PRODUCT_CDVARCHAR(10)TRUE
CATEGORYVARCHAR(10)TRUE
PRICENUMBERTRUE


🎁 문제

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


🙄 예시

FOOD_PRODUCT 테이블이 다음과 같을 때

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

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

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
P0020맛있는산초유CD_OL00010식용유6500



💖 정답

MySQL

1
2
3
4
SELECT *
FROM FOOD_PRODUCT 
WHERE PRICE = (SELECT MAX(PRICE)
              FROM FOOD_PRODUCT)
  • 실행결과

    PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
    P0051맛있는배추김치CD_KC00001김치19000


Oracle

1
2
3
4
SELECT *
FROM FOOD_PRODUCT 
WHERE PRICE = (SELECT MAX(PRICE)
              FROM FOOD_PRODUCT)
  • 실행결과

    product_idproduct_nameproduct_cdcategoryprice
    P0051맛있는배추김치CD_KC00001김치19000