다른컬럼들에 대한 랭킹정하기? 0 6 544

by 공부하자 [MySQL] [2019.06.20 09:24:52]


안녕하세요. 

프로그램 진행중 문의할 내용이 있어 질문좀 드리려합니다.

제목이 좀 애매한데요.

아래와같은 쿼리문이 구성이 되어있습니다.

즉 사이트에 문의 및 유입경로의 통계를 내고 있는데요.

구글 및 네이버의 통계테이블은 별도로 존재합니다.

또한 문의방식 및 영업처의 값들이 저장되는 컬럼도 다릅니다.

아래와같은 방식에서 랭킹순위를 정할수 있을까요?

조언좀 부탁드립니다.

--- 실사용으로 삭제합니다..양해바랍니다. ----

by 마농 [2019.06.20 11:24:42]

1. MySQL 버전이 어떻게 되나요?
 - 분석함수 가능 버전(8.0)이면 RANK 함수로 간단하게 순위를 구할 수 있습니다.
 - 예전 버전이라면? @변수를 사용한다거나, 셀프조인 방식으로 구해야 하는데...
2. 순위를 구하는 기준이 뭔가요?
 - 질문이 불분명하네요.


by 공부하자 [2019.06.20 11:59:47]

답변감사합니다.

버전은 예전버전입니다. 

순위를 구하는 기준이라는게 무엇을 말씀하시는건지 모르겠으나

위 쿼리에서 count를 이용해 나온 u_cnt0~u_cnt8까지값의 순위입니다.


by 마농 [2019.06.20 13:12:00]

작성하신 쿼리는 결과가 한줄로 나오는 쿼리인데요? (1행 9항목)
순위를 구하게 되면 어떤 형태의 결과를 원하시는 건지?
9개 건수를 서로 비교해 순위를 부여한다는 건가요?


by 공부하자 [2019.06.20 13:58:49]

답변감사합니다.

말씀처럼 9개 건수를 서로 비교해서 순위를 정하고자 합니다.


by 마농 [2019.06.20 14:15:10]
SELECT gb
     , cnt
     , @rn := @rn + 1 AS rn
  FROM (SELECT gb
             , CASE gb WHEN 0 THEN u_cnt0
                       WHEN 1 THEN u_cnt1
                       WHEN 2 THEN u_cnt2
                       WHEN 3 THEN u_cnt3
                       WHEN 4 THEN u_cnt4
                       WHEN 5 THEN u_cnt5
                       WHEN 6 THEN u_cnt6
                       WHEN 7 THEN u_cnt7
                       WHEN 8 THEN u_cnt8
                 END cnt
             , @rn := 0
          FROM (SELECT COUNT(CASE WHEN g.referer_site LIKE '%google%' THEN 1 END) u_cnt0 -- 유입경로(구글)
                     , COUNT(CASE WHEN g.referer_site LIKE '%naver%'  THEN 1 END) u_cnt1 -- 유입경로(네이버)
                  FROM mms_new_referer g 
                 INNER JOIN mms_new_default_info n 
                    ON g.mms_unique_num = n.mms_unique_num
                 WHERE (g.referer_site LIKE '%google%' OR g.referer_site LIKE '%naver%')
                   AND g.referer_datetime BETWEEN '2019-06-16' AND '2019-06-22' 
                ) a
         CROSS JOIN
               (SELECT COUNT(CASE mms_sales_t WHEN 'H' THEN 1 END) u_cnt2                -- 문의방식(전화문의)
                     , COUNT(CASE mms_sales_t WHEN 'I' THEN 1 END) u_cnt3                -- 문의방식(인터넷문의)
                     , COUNT(CASE mms_sales_t WHEN 'E' THEN 1 END) u_cnt4                -- 문의방식(이메일문의)
                     , COUNT(CASE mms_sales_u WHEN 'A' THEN 1 END) u_cnt5                -- 영업처(광고)
                     , COUNT(CASE mms_sales_u WHEN 'I' THEN 1 END) u_cnt6                -- 영업처(소개)
                     , COUNT(CASE mms_sales_u WHEN 'C' THEN 1 END) u_cnt7                -- 영업처(기존고객)
                     , COUNT(CASE mms_sales_u WHEN 'E' THEN 1 END) u_cnt8                -- 영업처(기타)
                  FROM mms_new_default_info  q
                 INNER JOIN mms_project_info b
                    ON q.mms_unique_num = b.mms_unique_num
                 WHERE b.mms_sales_date BETWEEN '2019-06-16' AND '2019-06-22'
                ) b
         CROSS JOIN
               (SELECT 0 gb
                UNION ALL SELECT 1
                UNION ALL SELECT 2
                UNION ALL SELECT 3
                UNION ALL SELECT 4
                UNION ALL SELECT 5
                UNION ALL SELECT 6
                UNION ALL SELECT 7
                UNION ALL SELECT 8
                ) c
         ORDER BY cnt DESC
         LIMIT 9
        ) a
;

 


by 공부하자 [2019.06.20 14:42:50]

앗....많은 도움되었습니다.

감사합니다.

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