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
'Programing 프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[백준] 1단계: 입출력과 사칙연산 (0) | 2022.01.18 |
---|---|
2021 Dev-Matching: 웹 백엔드 개발자 - 헤비 유저가 소유한 장소 (0) | 2022.01.12 |
SQL 고득점 Kit - String, Date (6) (0) | 2022.01.10 |
SQL 고득점 Kit - JOIN (5) (0) | 2022.01.07 |
SQL 고득점 Kit - IS NULL (4) (0) | 2022.01.06 |