39. 성분으로 구분한 아이스크림 총 주문량
문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/133026
정답 코드:
SELECT
ii.INGREDIENT_TYPE,
SUM(fh.TOTAL_ORDER) AS TOTAL_ORDER
FROM ICECREAM_INFO ii
INNER JOIN FIRST_HALF fh
on ii.FLAVOR = fh.FLAVOR
GROUP BY ii.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC
문제 풀이때 했던 생각.
| 문제에서 원하는 것은 아이스크림 성분 타입과 그에 대한 총주문량 때문에 FIRST_HALF 과 ICECREAM_INFO 테이블을 조인 기준 테이블은 ICECREAM_INFO 테이블, 각 아이스크림 성분 타입의 총 주문량을 구해야 하기 때문에 LEFT JOIN 사용 그룹은 ii.INGREDIENT_TYPE로 묶음(성분 타입별 총주문량을 원했기 때문에) 총주문량이 작은 순서대로 보이길 원했기 때문에 ORDER BY TOTAL_ORDER ASC 사용 |
무엇이 잘못되었나?
| JOIN 종류 선택 관점 (논리적 의심 지점) [각 아이스크림 성분 타입의 총 주문량을 구해야 하기 때문에 LEFT JOIN 사용] 문제에선 “상반기 총 주문량”을 요구함, FIRST_HALF 테이블은 상반기 주문 데이터만 존재 매출을 계산한다는 건 → 주문이 존재한 맛(flavor) 만 대상이 되는 게 자연스러움 이때 LEFT JOIN을 쓰면... → 상반기에 한 번도 팔리지 않은 아이스크림도 INGREDIENT_TYPE 집계에 포함될 수 있음 → 이 경우 SUM(fh.TOTAL_ORDER)는 NULL이거나 0에 가까운 값이 됨 문제 조건(상반기 총 주문량) 관점에서 LEFT JOIN이 “의도에 맞는가?”는 다시 고민해볼 필요가 있음 |
해결법
| 문제에서 원하는 것은 “상반기 총 주문량” 즉, 주문된 아이스크림의 총 주문량을 구해야함. -> 모든 아이스크림을 출력하는것이 아닌 '주문된' 아이스크림만 보는게 더 옳바름 때문에 INNER JOIN 사용 + 문제에선 총 주문량을 보여달라 했지, 팔리지 않은 아이스크림은 빼달라 하지 않았음, LEFT JOIN도 정답이긴 하나... 허나 이 문제는 상반기 총주문량 비교가 목적이기 때문에 주문 데이터가 존재하는 아이스크림만 집계해야 하고, 따라서 INNER JOIN이 문제 의도에 더 부합하다 판단. |
40. 루시와 엘라 찾기
문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/59046
정답 코드:
SELECT
ANIMAL_ID,
NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID ASC
문제 풀이때 했던 생각.
| 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물들을 원했기 때문에 WHERE 절을 사용해 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물로 필터링 in을 사용하긴 했으나 or 을 사용해 문제를 풀수도 있음 |
41. 조건에 맞는 도서 리스트 출력하기
문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/144853
정답 코드:
SELECT
BOOK_ID,
DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM book
WHERE PUBLISHED_DATE LIKE '2021%'
AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE ASC
문제 풀이때 했던 생각.
| 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 원했기 때문에 WHERE 절로 출판일이 2021년이면서 카테고리가 '인문'인 도서 필터링 |
42. 평균 일일 대여 요금 구하기
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/151136
정답 코드:
SELECT
ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
문제 풀이때 했던 생각.
| SUV 타입의 평균 일일 대여 요금을 원하기 때문에 WHERE 절로 'SUV'만 따로 추출 이후 AVG를 사용해 평균값을 구한뒤 ROUND를 사용해 소수점 첫번째 자리 반올림 |
'E.코드카타 > Level 3' 카테고리의 다른 글
| 코드카타 Level 3 다시 풀어보기 31~50 (1) | 2026.01.15 |
|---|---|
| 코드카타 Level 3 46, 48, 49, 50 (0) | 2026.01.09 |
| 코드카타 Level 3 43~45 (0) | 2026.01.08 |
| 코드카타 Level 3 34~38 (sql 복습시 참고) -나중에 서브쿼리로 풀어보기- (0) | 2026.01.06 |
| 코드카타 Level 3 1번~3번 (0) | 2026.01.05 |
