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 |
→ 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문을 작성해주세요.
PRODUCT_ID | PRODUCT_NAME | PRODUCT_CD | CATEGORY | PRICE |
---|---|---|---|---|
P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
SELECT *
FROM food_product
WHERE price IN(SELECT MAX(price)
FROM food_product
);
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, MAX(PRICE) AS PRICE
FROM FOOD_PRODUCT
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
where절에 서브쿼리 쓰면 레코드마다 서브쿼리 실행하니까 낭비라고 함
set 변수를 생성해서 순번 매기기
set @mx := (select max(price) from food_product);
select *
from food_product
where price = @mx
rank를 이용해서 풀어도 될 것 같다.
SELECT product_id, product_name, product_cd, category, price
FROM (SELECT *, RANK() OVER (ORDER BY price DESC) ranking
FROM food_product
) a
WHERE ranking = 1;