[MySQL] 식품분류별 가장 비싼 식품의 정보 조회하기 - GROUP BY

Saemi Min·2023년 2월 17일
0

MySQL

목록 보기
9/21
post-thumbnail

문제

해당 문제 링크

정답

SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME FROM FOOD_PRODUCT
WHERE PRICE IN(SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY (CATEGORY)) 
    AND CATEGORY IN ('과자', '국', '김치','식용유') 
ORDER BY PRICE DESC

풀이

처음 작성했던 풀이

하지만 결과를 봤을 때 PRODUCT_NAME이 테이블 순으로 처음 해당 카테고리에 나오는 식품 이름이었다. MAX값에 해당하는 이름이 안나오는 것을 보고 잘못된 코드라는 것을 알았다.
만약 GROUP BY를 뺸다면, 코드 해석은 가장 비싼 식품은 가져오되, 과자, 국, 김치, 식용유 중에 비싼 것을 가져와라가 된다. 카테고리 별로 가장 비싼 식품을 가져와야 하는데 무턱대고 MAX()를 쓰면 그냥 무작정 비싼 거 하나 가져와라 인것이다. 그 대신 과자 , 국, 김치, 식용유 중에서! 라고 하는 것이다. 그룹화를 하면 카테고리 별로 가장 비싼 것은 가져올지 몰라도, 비싼 제품 명은 같이 가져오지 못하고, 단순히 의미없는 가장 위에 있는 이름이 가져와지게 되는 것이다.

SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치','식용유')
GROUP BY (CATEGORY)
ORDER BY PRICE DESC

문제를 봐보자

FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

  • FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요.
    => 식품분류별로 -> GROUP BY (CATEGORY)
    => 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문 -> 식품의 분류, 가격, 이름 모두 제일 비싼 식품으로 나와야하므로, 가격을 기준으로 해당하는 결과가 나올 수 있도록 -> MAX(PRICE)와 GROUP BY (CATEGORY)이 되어야 한다는 것이다!
  • 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고
    => CATEGORY IN ('과자', '국', '김치','식용유')
  • 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
    => ORDER BY PRICE DESC

문법

IN 조건

조건의 범위를 지정할 때 사용

  • 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드
  • 값은 콤마( , )로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가된다.
  • OR보다 IN이 실행 속도가 더 빠르다
-- OR조건 표현
WHERE Condition = 'A'
OR Condition = 'B'
-- IN조건
WHERE Condition IN ('A','B')
  • IN 연산자 안에 또 다른 SELECT 쿼리문을 넣을 수 있다.
profile
I believe in myself.

0개의 댓글