postgresql 로 쿼리를 짜고 있는데 막혀서 질문드립니다.
해당사이트에 접속한 사용자의 일자별 성별별 최다방문연령을 알고싶습니다.
tb1(회원 테이블)
아이디 성별 생년월일
tb2(로그 테이블)
아이디 발생일자
테이블이 이렇게 있는데
원하는 결과는
발생일자 / 남자Count / 남자최다방문연령 / 여자Count / 여자최다방문연령
2020-01-01 100 30대 200 20대
2020-01-02 200 40대 400 10대
입니다.
log테이블에 조인을 해야하는 상황이라 쿼리실행도 상당히 느려서
까다롭네요.
도움요청드립니다.
SELECT 일자 , SUM(CASE WHEN 성별 = '남' THEN cnt END) 남자_cnt , ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN 성별 = '남' AND rk = 1 THEN 연령 END ORDER BY 연령), ',') 남자최다방문연령 , SUM(CASE WHEN 성별 = '여' THEN cnt END) 여자_cnt , ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN 성별 = '여' AND rk = 1 THEN 연령 END ORDER BY 연령), ',') 여자최다방문연령 FROM (SELECT 일자, 성별, 연령 , COUNT(*) cnt , RANK() OVER(PARTITION BY 성별 ORDER BY COUNT(*) DESC) rk FROM (SELECT 일자 , 성별 , 연령대구하기(생년월일) 연령 FROM tb1 a , tb2 b WHERE a.id = b.id AND b.일자 BETWEEN '2020-01-01' AND '2020-01-31' ) a GROUP BY 일자, 성별, 연령 ) a GROUP BY 일자 ;
연령대는 만나이인지? 한국나이인지? 정해서 직접 구해 보세요.
PC에 포스그레 설치가 되어 있지 않아 직접 테스트가 불가하네요.