안녕하세요~👋
오늘도 공부하는 무럭무럭 ✨성장몬
✨ 입니다.
저는 처음에 이 문제를
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 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 |
💖 정답
MySQL
1
2
3
4
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT)
실행결과
PRODUCT_ID PRODUCT_NAME PRODUCT_CD CATEGORY PRICE P0051 맛있는배추김치 CD_KC00001 김치 19000
Oracle
1
2
3
4
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT)
실행결과
product_id product_name product_cd category price P0051 맛있는배추김치 CD_KC00001 김치 19000