[58] 부트캠프 TIL - 본캠프 40일차

2024. 10. 18. 17:19부트캠프 TIL

728x90

1. 프로그래머스 사용

1-1)  sql 문제 : 식품분류별 가장 비싼 식품의 정보 출력하기

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

 

 

ㄴ 설명_1 : 조회할 컬럼 체크 - 식품분류, 가장비싼가격, 식품이름

ㄴ 설명_2 : 식품 분류 조건 (WHERE IN 사용 - 과자,국,김치,식용유)

ㄴ 설명_3 : MAX() 함수 사용 - 최대값 구하기(가장비싼)

ㄴ 설명_4 : 식품분류별 조회 (GROUP 사용)

ㄴ 설명_5 : 가격 기준으로 내림차순 정렬 (ORDER BY DESC)

ㄴ 실제 쿼리 :

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 2 DESC;

ㄴ 핵심포인트는 최대값과 식품분류별 GROUP BY를 서브쿼리로 진행해야한다는 점이다.

ㄴ 서브쿼리 제거하고 진행하면 MAX_PRICE값은 정상적으로 나와서 값이 맞다고 착각을 할 수 있다.

- 하지만 결과를 자세히 보면 PRODUCT_NAME의 값이 다른것을 확인할 수 있다.

- 상품이름이 가장 위에 값만 나오는것으로 볼 수 있다.(과자,국,김치,식용유를 IN말고 각각의 값으로 조회했을 경우)

ㄴ GROUP BY를 전체에서 진행할 경우에 지정하는 컬럼제외하고 다른 컬럼은 정렬이 안된 상태로 그룹화가 되기 때문에 상품이름이 원하는 값이 안나오는 것을 볼 수 있다.(식품분류를 그룹화하고 가장 위에값을 가져온다)

ㄴ 위의 결과값은 서브쿼리로 인하여 상품이름이 옆에 가격과 맞추어서 잘 출력된 것을 볼 수 있다.

ㄴ 위 결과값은 상품이름이 바뀐것을 볼 수있다. 옆에 가격과 상품의 가격은 일치하지 않다.

728x90