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

쥬쥬스·2023년 11월 16일
0

SQL

목록 보기
55/67
post-thumbnail

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

💡 조건

  • 성별 정보 없는 경우 제외
  • 년, 월, 성별로 집계
  • 상품 구매한 회원수 집계
  • 결과는 년, 월, 성별 순으로 오름차순 정렬

sql 코드

SELECT year(sales_date) year, month(sales_date) month, gender,
        count(DISTINCT(sale.user_id)) users
FROM online_sale as sale join 
    (SELECT user_id, gender
    FROM user_info
    WHERE gender is not null) as user
    on user.user_id = sale.user_id
GROUP BY year, month, gender
ORDER BY year, month, gender

  1. 테이블 합치는 김에 성별 먼저 처리해주기
  • not null 사용해서 미리 gender가 비어있는 경우를 제외해주었다. 상품을 구매했다고 해도 이경우는 제외되는 경우니까 미리 해줘도 상관없다고 판단했다.
  • 결과 조회 할 때, 성별도 집계 해주기 때문에 id와 gender 두개를 user 테이블에서 가져왔다.
FROM online_sale as sale join 
    (SELECT user_id, gender
    FROM user_info
    WHERE gender is not null) as user
    on user.user_id = sale.user_id
  1. 테이블 완성 됐으니까 그룹화
    차례대로 그룹핑 해주면 year로, month로, gender로 묶어준다. SELECT문에서 필드명을 바꿔줬기 때문에 아래처럼 지정한걸로 사용할 수 있다.
GROUP BY year, month, gender
  1. 그럼 이제 조회 해보자
  • 기본적으로 년, 월, 성별을 조회해준다.
  • 중요한건 회원수 집계. user_id별로 묶었을 때, 한 사람이 여러번 구매한 경우에도 한 사람이 구매한거니까 DISTINCT로 중복 제거해준다.
SELECT year(sales_date) year, month(sales_date) month, gender,
        count(DISTINCT(sale.user_id)) users
  1. 정렬은 오름차순으로
ORDER BY year, month, gender
profile
느려도... 꾸준히.....🐌

0개의 댓글