-
[프로그래머스]우유와 요거트가 담긴 장바구니(Lv.4)SQL 2023. 4. 12. 00:33
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
가장 먼저 테이블을 확인해보니 아이템들이 분리되어 있어서 일단 합치는 것이 필요하다고 생각했다.
검색해보니 group_concat을 사용하면 된다고 나왔다.
group_concat을 사용하여 여러 열에 있는 cart에 담긴 아이템들을 한 줄로 묶고, 거기에 milk와 yogurt가 들어있는 cart_id를 추출하려고 했다.
SELECT cart_id, group_concat(name) as name FROM cart_products WHERE name in ('milk', 'yogurt') group by cart_id order by cart_id;
또 실패. IN을 쓰면 milk 또는 yogurt 인 것만 나온다.
구글링해도 or 조건에 대한 결과는 많이 나오는데 두 조건을 포함하는 것은 바로 안나왔다..
count함수를 써서 2가 넘는 걸 쓸까 했는데 그러면 yogurt가 2개인 경우, milk가 2개인 경우들이 포함되어서 그것도 맞지 않았다.
데이터분석가의 가장 기본적인 업무라고 생각했는데..완전히 막혀버렸다.
계속 구글링을 해도 도저히 모르겠어서 다른 사람들의 답을 컨닝했다.
(2시간 정도 구글링함)
나랑 비슷하게 생각한 사람이 왜 이런 코드가 안되냐고 질문했다.
name = 'milk' and name = 'yogurt'
'name이 우유이면서 요거트인 행이 없기에 서브쿼리에서 검색되는 행이 하나도 없습니다.' 라는 답변을 보았다.
group_concat을 사용한 답변을 보았다.
SELECT T.CART_ID FROM ( SELECT P.CART_ID, GROUP_CONCAT(P.NAME) NAME FROM CART_PRODUCTS P WHERE (P.NAME LIKE 'Milk' OR P.NAME LIKE 'Yogurt') GROUP BY P.CART_ID ) T WHERE T.NAME LIKE '%Milk%' AND T.NAME LIKE '%Yogurt%' ORDER BY T.CART_ID;
복잡하다..
하지만 아이디어는 대충 맞은 것 같다.
group_concat 을 사용해서 milk or yogurt가 들어있는 리스트를 뽑고,
그 중에서 milk와 yogurt가 함께 들어있는 결과를 추출한다.
레벨 4 너무 어렵지만 맨날 쉬운 것만 할 수는 없으니까.
어려워도 보고 계속 시도해보고 풀어보고, 어떻게 쓰는지 보면서 익숙해지는 게 필요한 것 같다.
구글링해도 내가 원하는 답이 딱 나오진 않는다. google scholar에 검색하는 것처럼.
구글링하면서도 여러 방법들이 있다는 것을 배운다.
스터디를 하니까 내가 생각만 했던 방법으로 다른 사람들이 구현한 것을 보는 것도 공부가 된다.
그런데 답을 봐도 이게 왜 답인지 아직 잘 모르겠는 부분이 많다.
공부가 더 필요하다. 아직 2일차니까 너무 조급하게 생각하지 말자.
분명한 것은 어제보다 나아졌다. 확실히 공부가 많이 된다.
'SQL' 카테고리의 다른 글
[프로그래머스]과일로 만든 아이스크림 고르기(LV.1) (0) 2023.06.11 [프로그래머스]자동차 대여 기록에서 장기/단기 대여 구분하기(Lv.1) (0) 2023.04.17 [프로그래머스]Lv.1 문제 모음 (0) 2023.04.13 [프로그래머스]입양 시각 구하기(Lv.4) (0) 2023.04.12 [프로그래머스]식품분류별 가장 비싼 식품의 정보 조회하기(Lv.4) (0) 2023.04.10