-
[코딩테스트] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기(MySQL, Level4)코딩테스트/프로그래머스 2022. 12. 14. 00:01728x90
안녕하세요~
눈이 참 많이 오는 날이네요~
아쉽게도 Java쪽 코딩테스트를 올리지 못하고 오늘은 쿼리관련 문제만 올립니다.
풀지못했기때문이죠~ 어렵네요~ 이제는 들여다봐도 힌트없이 풀지를 못하니...
이게 제 실력인지 뭔지 헷갈릴뿐이네요 ㅠㅠ
더 열심히 살아보겠습니다 빠샤!💪
그럼 문제 만나보시죠~
https://school.programmers.co.kr/learn/courses/30/lessons/131532
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
쉬운듯 쉽지않은 문제였습니다. distinct에 대해 사용법이 어색해 많이 헤맸습니다.
제가 작성한 쿼리문입니다.
-- 코드를 입력하세요 SELECT year(sales_date) as year, month(sales_date) as month,ui.gender, count(distinct os.user_id) from user_info ui join online_sale os on ui.user_id=os.user_id where ui.gender is not null group by year(sales_date), month(sales_date),ui.gender order by year(sales_date), month(sales_date),ui.gender
짧다~?라고 생각하실 수도 있지만 저에게는 오히려 시간은 제일 오래걸린거 같네요.
여기서 포인트는
① 년, 월, 성별 별로 ~ 라는 구문을 읽고 group by를 생각해 냈다
② 한 명의 사용자가 같은 년, 월에 여러번 샀더라도 count는 1로만 돼야하기에 distinct를 사용해야 된다.
이렇게 2개의 포인트를 잡아내셨다면 성공이지 싶습니다.
또한 'yyyy-mm-dd'의 구조를 select하기위해
① year(sales_date)
② month(sales_date)
이렇게 sales_date에서 추출해서 썼습니다.
저번에 비슷한 파싱을하면서 배웠습니다 헤헤
이번기회를 통해 저같은 경우에는 distinct를 사용해볼 수 있었습니다.
제가 알아낸 distinct의 특징으로는
1) 맨앞에서 사용
일단 이정도 입니다. 그리고 사용하기 매우 까다롭더군요.
조건에 따라 gender가 null인 부분 제거하고 distinct를 통해 뽑아낸 각각의 user_id를
count해주면 해결 하실 수 있습니다.
감사합니다. :D
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 취소되지 않은 진료 예약 조회하기(MySQL, Level4) (0) 2022.12.16 [코딩테스트] 프로그래머스 - 서울에 위치한 식당 목록 출력하기(MySQL, Level4) (0) 2022.12.14 [코딩테스트] 프로그래머스 - 불량 사용자(Java, Level3) (1) 2022.12.12 [코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3) (0) 2022.12.10 [코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2) (0) 2022.12.10