✅ 프로그래머스 문제 - FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.식품분류별 가장 비싼 식품의 정보 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✅ 문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
✅ 잘못된 코드
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE,PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('식용유', '과자', '국', '김치')
GROUP BY CATEGORY ,PRODUCT_NAME
ORDER BY PRICE DESC
처음에 내가 생각한 코드이다 너무 간단한 문제가 아닌가 했는데 GROUP BY를 제대로 확인안하고 생각없이 짠거같다.
만약 저런식으로 SQL을 짜게된다면 GROUP BY에 PRODUCT_NAME을 넣었기 때문에 가격이 가장 비싼 제품을 정확하게 찾을수가 없다. 즉, 무조건 식품분류별로 GROUP BY를 하는거면 해당값만 있어야되고 다른값이 들어가면 안된다.
✅ 올바른 코드
WITH A AS (
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('식용유', '과자', '국', '김치')
GROUP BY CATEGORY
)
SELECT A.CATEGORY, A.MAX_PRICE, B.PRODUCT_NAME FROM A
INNER JOIN FOOD_PRODUCT B ON A.CATEGORY = B.CATEGORY AND A.MAX_PRICE = B.PRICE
ORDER BY B.PRICE DESC
올바른 코드는 여러가지 방법이있지만 WITH절을 이용했고 JOIN 을 이요해서도 가능하고 다양한 방법으로 가능할거같다.
✏️ 공부한점
- GROUP BY문제가 어떤 값을 중심으로 묶는지 집계함수를 어떤값을 중심으로 풀어야되는 문제가 나오면 해당값만 그룹바이를 해야된다.
'Algorithm' 카테고리의 다른 글
| [SQL 알고리즘] 프로그래머스 - 입양 시각 구하기 (2) | 2024.12.03 |
|---|---|
| [SQL 알고리즘] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (2) | 2024.11.27 |
| [SQL 알고리즘] 프로그래머스 - 저자 별 카테고리 별 매출액 집계하기 (2) | 2024.11.21 |
| [SQL 알고리즘] 프로그래머스 - 언어별 개발자 분류하기 (0) | 2024.11.21 |
| [JAVA 알고리즘] charAt() 함수 (0) | 2024.04.04 |