DB/SQL오답노트

[SQL오답노트/프로그래머스]LV.2 가격이 제일 비싼 식품의 정보 출력하기

각시탈코더 2023. 3. 6. 12:44

1.문제 설명

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


PRODUCT_ID VARCHAR(10) FALSE
PRODUCT_NAME VARCHAR(50) FALSE
PRODUCT_CD VARCHAR(10) TRUE
CATEGORY VARCHAR(10) TRUE
PRICE NUMBER TRUE

2.문제


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


3.문제 설명

예시

예를 들어 PRODUCT 테이블이 다음과 같다면

PRODUCT_IDPRODUCT_CODEPRICE

1 A1000011 10000
2 A1000045 9000
3 C3000002 22000
4 C3000006 15000
5 C3000010 30000
6 K1000023 17000

만원 단위의 가격대 별로 상품을 나누면

  • 가격대가 0원 ~ 1만원 미만인 상품은 PRODUCT_ID 가 2인 상품 1개,
  • 가격대가 1만원 이상 ~ 2만원 미만인 상품들은 PRODUCT_ID 가 1, 4, 6인 상품 3개,
  • 가격대가 2만원 이상 ~ 3만원 미만인 상품은 PRODUCT_ID 가 3인 상품 1개,
  • 가격대가 3만원 이상 ~ 4만원 미만인 상품은 PRODUCT_ID 가 5인 상품 1개,

에 각각 해당하므로 다음과 같이 결과가 나와야 합니다.

PRICE_GROUPPRODUCTS

0 1
10000 3
20000 1
30000 1

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

 

4.정답

SELECT PRICE_GROUP,
COUNT(PRICE_GROUP) AS PRODUCTS
FROM (SELECT FLOOR(PRICE/10000)*10000 AS PRICE_GROUP FROM PRODUCT)
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

 

5.내가 오답을 쓴 이유 

  • 다중햄 함수는 컬럼 이외에는 쓸 수 없다는 사실을 몰랐다.
  • 다중행 함수를 조건으로 쓰고 싶다면 서브쿼리를 고려해본다.