postgresql 최다방문(접속)연령대 0 2 1,406

by 보냐스키 [SQL Query] Mysql postgresql [2020.05.19 10:10:48]


postgresql 로 쿼리를 짜고 있는데 막혀서 질문드립니다.

해당사이트에 접속한 사용자의 일자별 성별별 최다방문연령을 알고싶습니다.

 

tb1(회원 테이블)

아이디 성별 생년월일

 

tb2(로그 테이블)

아이디 발생일자

 

테이블이 이렇게 있는데

 

원하는 결과는

발생일자 / 남자Count / 남자최다방문연령 / 여자Count / 여자최다방문연령

2020-01-01    100            30대                  200                    20대

2020-01-02    200            40대                  400                    10대

입니다.

 

log테이블에 조인을 해야하는 상황이라 쿼리실행도 상당히 느려서

까다롭네요.

도움요청드립니다.

by 마농 [2020.05.19 12:50:44]
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에 포스그레 설치가 되어 있지 않아 직접 테스트가 불가하네요.


by 보냐스키 [2020.05.19 15:53:21]

감사합니다!!!!!^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입