2024. 10. 18. 17:19ㆍ부트캠프 TIL
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를 전체에서 진행할 경우에 지정하는 컬럼제외하고 다른 컬럼은 정렬이 안된 상태로 그룹화가 되기 때문에 상품이름이 원하는 값이 안나오는 것을 볼 수 있다.(식품분류를 그룹화하고 가장 위에값을 가져온다)
ㄴ 위의 결과값은 서브쿼리로 인하여 상품이름이 옆에 가격과 맞추어서 잘 출력된 것을 볼 수 있다.
ㄴ 위 결과값은 상품이름이 바뀐것을 볼 수있다. 옆에 가격과 상품의 가격은 일치하지 않다.
'부트캠프 TIL' 카테고리의 다른 글
[60] 부트캠프 TIL - 본캠프 42일차 (0) | 2024.10.22 |
---|---|
[59] 부트캠프 TIL - 본캠프 41일차 (6) | 2024.10.21 |
[57] 부트캠프 TIL - 본캠프 39일차 (10) | 2024.10.17 |
[56] 부트캠프 TIL - 본캠프 38일차 (4) | 2024.10.16 |
[55] 부트캠프 TIL - 본캠프 37일차 (1) | 2024.10.15 |