Data Scientist 옌

매일 발전하는 IT문제해결사

Programing 프로그래밍/코딩테스트 문제풀이

Summer/Winter Coding(2019) - 우유와 요거트가 담긴 장바구니

옌炎 2022. 1. 11. 09:23
728x90

우유와 요거트가 담긴 장바구니

우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하기 (결과는 장바구니의 아이디 순)가 문제입니다.

MySQL 기준으로 풀이하였습니다.

제가 풀이한 과정은 아래와 같습니다.

요거트를 산 장바구니를 기준으로 우유를 산 장바구니를 붙이도록 해서 결과를 냈습니다.

그런데 제가 머릿 속으로 그린 결과가 나오도록 아무리 해봐도 답이 안나오길래 정답을 알기 위해 다른 분들 코드를 보고 돌려 정답을 확인했습니다. 

SELECT M.CART_ID
FROM CART_PRODUCTS AS M, CART_PRODUCTS AS Y
WHERE M.CART_ID = Y.CART_ID
AND M.NAME = 'Milk'
AND Y.NAME = 'Yogurt'
ORDER BY M.CART_ID

위 코드를 돌려 아래 답이 나왔을 때 정답 처리 됐습니다.

CART_ID
286
448
448
578
578
977
1048
1048

 

저는 우유와 요거트를 산 장바구니를 DISTINCT로 알아낸다고 생각하고 풀이했는데 답을 보니 아니더라고요... 그래서 장바구니 아이디의 중복이 있는 채로 정답과 같이 결과가 나오도록 해서 만든 코드는 아래와 같습니다.

SELECT M.CART_ID
FROM
(
SELECT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME IN ('Yogurt')
) Y # 요거트 산 횟수 12번
LEFT JOIN
(
SELECT CART_ID, NAME, ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk')
) M ON M.CART_ID = Y.CART_ID # 우유 산 횟수 10번
ORDER BY Y.CART_ID

결국 같은 결과값이 나오도록 코딩 했는데 정답처리가 안되더라고요. 또 생각해보니 어떤 항목을 산 장바구니를 기준 테이블로 두고 LEFT JOIN하느냐도 좀 걸리는 문제이다보니 정답처리된 코드처럼 간결하고 좋은 코드를 외우도록 하죠. 조금 허탈하지만 이상입니다.

728x90