스터디/학습일지

[SQL] 20250616- mySQL 문제 풀이 미션 (2)

다다킴 2025. 6. 16. 20:48

2.성분으로 구분한 아이스크림 총 주문량 (문제풀이 시간 25분) 

[문제]

상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

[문제풀이]

문제에서는 테이블이 2개가 있다. 아이스크림 가게의 주문정보가 담긴 (상반기) FIRST_HALF 테이블 구조와 아이스크림 맛이 있는 ICECREAM_INFO이다. 

1.  FIRST_HALF 

NAME  TYPE NULLABLE
SHIPMENT_ID (출하번호) INT(N) FALSE
FLAVOR (맛) VARCHAR(N) FALSE
TOTAL_ORDER (주문량) INT(N) FALSE

2.  ICECREAM_INFO

NAME TYPE NULLABLE
FLAVOR (맛) VARCHAR(N) FALSE
INGREDIENT_TYPE(성분) VARCHAR(N) FALSE

여기서 공통적인 요소가 있는 것은 FLAVOR 맛이기 때문에 Join을 하여 연결을 하였다. 그리고, SELECT은 성분과 총 주문수를 출력 하는 내용이기 때문에 아래와 같이 작성하였다 (TOTAL_ORDER에 어떤 내용이 들어갈지 확인해야하므로 일단 괄호를 쳐둠)

SELECT INGREDIENT_TYPE, ()AS TOTAL_ORDER 
from FIRST_HALF F 
join ICECREAM_INFO I on F.FLAVOR = I.FLAVOR

그 다음엔 아이스크림 성분에 따른 총 주문량을 계산 해야하는데, 아이스크림 성분 'INGREDIENT_TYPE'를 Group by를 걸었다. 그 다음 SELECT 문에는 총 주문량이 출력 되어야 하기 때문에 Sum(F.TOTAL_ORDER)AS TOTAL_ORDER로 처리를 하였다. 

SELECT INGREDIENT_TYPE, ()AS TOTAL_ORDER 
from FIRST_HALF F 
join ICECREAM_INFO I on F.FLAVOR = I.FLAVOR
group by INGREDIENT_TYPE

 마지막으로 총 주문량이 작은 순서대로 조회하는 SQL문을 작성해 달라는 내용도 있어, order by를 처리했다. 

order by F.TOTAL_ORDER ASC;

그래서 정답은 아래와 같다.

[문제정답]

SELECT I.INGREDIENT_TYPE, Sum(F.TOTAL_ORDER)AS TOTAL_ORDER #아이스크림의 성분 
from FIRST_HALF F 
join ICECREAM_INFO I on F.FLAVOR = I.FLAVOR 
# Left join ICECREAM_INFO I on F.FLAVOR = I.FLAVOR 했을 때도 맞았음
group by I.INGREDIENT_TYPE 
order by F.TOTAL_ORDER ASC;

 

초기화를 하고 문제를 다시 파악하는데 10분, 문제의 정답을 도출 하는지 15분 정도 걸린듯
갑자기 좀 이상한 의문점이 생겼는데, 처음 코드카타를 문제 풀었을 때 Left join을 활용했지만 그 때도 정답이 처리가 되었다. 
또 다른 풀이에서는 Where를 활용하는 내용이 있었는데, From절에 2개가 나올 수 있는지 궁금했다 (궁금해서 찾아봤던 것)

[참고차 다른 분이 푼 답 ]

SELECT I.INGREDIENT_TYPE, Sum(F.TOTAL_ORDER)AS TOTAL_ORDER #아이스크림의 성분 
from FIRST_HALF F, ICECREAM_INFO I
where F.Flavor = I.flavor 
group by I.INGREDIENT_TYPE
order by F.TOTAL_ORDER asc;