[MySQL]년, 월, 성별 별 상품 구매 회원 수 구하기

2025. 4. 14. 09:22·코딩테스트/SQL

https://school.programmers.co.kr/learn/courses/30/lessons/131532

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

📚문제

USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

 

✏️ 내 풀이 (오답..)

SELECT YEAR(SALES_DATE) YEAR,MONTH(SALES_DATE) MONTH,U.GENDER,COUNT(*) USERS
FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3

 

오답인 이유는 ONLINE_SALE 에는 똑같은 USER_ID가 동일한 년과 월에 구매이력이 두개 이상도 존재 할수 있기때문에 COUNT(*)를하게 되면 회원은 한명이지만 두개의 회원 수로 측정이 되어버린다.

 

✏️ 좋은 풀이

SELECT YEAR(SALES_DATE) YEAR,MONTH(SALES_DATE) MONTH,U.GENDER,COUNT(DISTINCT(O.USER_ID)) USERS
FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3

 

DISTINCT (중복제거)  를 통하여 동일한 USER_ID 의 값은 하나의 값으로 통합하면 된다. 

✒️ 회고

- GROUP BY를 쓸땐 항상 중복되는 값이 COUNT 되진 않는지 생각해보자!

 

'코딩테스트 > SQL' 카테고리의 다른 글

[MySQL] 없어진 기록 찾기  (0) 2025.04.11
[MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기  (0) 2025.04.10
[Mysql] 가격대 별 상품 개수 구하기  (0) 2025.04.07
[SQL]NULL 처리하기  (0) 2025.03.07
[SQL]Lv5. 예산이 가장 큰 프로젝트는?  (0) 2025.01.23
'코딩테스트/SQL' 카테고리의 다른 글
  • [MySQL] 없어진 기록 찾기
  • [MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기
  • [Mysql] 가격대 별 상품 개수 구하기
  • [SQL]NULL 처리하기
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (131) N
      • JavaScript (8)
      • SQL (10) N
      • 코딩테스트 (29)
        • Java (15)
        • SQL (12)
      • Java (10)
      • 프로젝트 (20)
        • 트러블슈팅 (6)
        • 프로젝트 회고 (12)
      • git,Github (2)
      • TIL (34) N
      • Spring (16) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java #arraylist #list #배열
    스파르타 코딩 #부트캠프 #첫ot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[MySQL]년, 월, 성별 별 상품 구매 회원 수 구하기
상단으로

티스토리툴바