쿼리 질문있습니다.. 0 6 1,414

by 보들윤 mysql [2017.08.08 13:44:33]


그누보드를 사용중 쿼리를 만드는데 몇시간 썼는데 도저히 답이안나와서 질문남깁니다 ㅠㅠ

g5_write_test 라는 게시판이 있습니다.

여기 게시판에

약 2000명정도의 회원은 각각 글을 1번 ~ 20번 등 

본인이 원하는 대로 글을 작성하는 자유게시판입니다.

 

제가 궁금한것은

여기 test라는 게시판의 글작성자 mb_id 가 

1회 글을 작성한 사람의 수 , 여러번 글을 작성한 사람의 수를 쿼리로 구하고싶습니다.

 

이유는 재작성, 1회작성 이렇게 두가지를 나누어서 퍼센트 형식으로

test라는 게시판에 글을 작성한 회원들이 몇퍼센트로 재작성을 했고, 1회 작성은 몇퍼센트인지

백분율 그래프로 표시해주기 위해서

그 숫자가 필요합니다..

 

쿼리로 간단하게 하는 방법이있을까요?

// . 1회 글 작성한 회원
SELECT count(DISTINCT `mb_id`) as cnt from g5_write_test

이렇게 쿼리를 해보니 총 몇명의 회원이(중복없이) 게시글을 남겼는지 개수가 나옵니다.

제가 원하는 방식은 전체 게시글의 글쓴이 mb_id 중 한번만 쓴사람은 몇명이고 한번이상의 게시글을 작성한 회원이 각각 몇명인지

구하고싶습니다.

한번에 가져오고싶어서 하나로 할수있을까해서 질문남겨봅니다 ㅠ

쿼리문을 두번사용하면 각각 구해올수있긴하지만 한번에 row에 넣어서 가져오고싶어서 그렇습니다. ㅠㅠ

by jkson [2017.08.08 14:01:03]
SELECT NVL(SUM(DECODE(CNT,1,1)),0) WRITE1 -- 1번 적은 사람 수
     , NVL(SUM(DECODE(CNT,1,NULL,1)),0) WRITEMORETHAN1 -- 1번 이상 적은 사람 수
     , NVL(SUM(DECODE(CNT,1,1)),0)/SUM(MBCNT)*100 PEROF1 -- 1번 적은 사람 비율
     , NVL(SUM(DECODE(CNT,1,NULL,1)),0)/SUM(MBCNT)*100 PEROFMORETHAN1 -- 1번 이상 적은 사람 비율
FROM
    (
    SELECT COUNT(MB_ID) CNT, 1 MBCNT
      FROM G5_WRITE_TEST
     GROUP BY MB_ID
    )

 


by 보들윤 [2017.08.08 14:13:25]

감사합니다 ㅠㅠ mysql이라보니 수정해서 해보겠습니다!


by jkson [2017.08.08 14:20:38]

아.. mysql이군요. decode를 case 문으로 바꾸시면 될 것 같습니다.


by 마농 [2017.08.08 14:21:23]
SELECT cnt_1
     , cnt_2
     , cnt_tot
     , ROUND(cnt_1 / cnt_tot * 100, 2) rat_1
     , ROUND(cnt_2 / cnt_tot * 100, 2) rat_2
  FROM (SELECT COUNT(CASE WHEN cnt = 1 THEN 1 END) cnt_1
             , COUNT(CASE WHEN cnt > 1 THEN 1 END) cnt_2
             , COUNT(*) cnt_tot
          FROM (SELECT mb_id
                     , COUNT(*) cnt
                  FROM g5_write_test
                 GROUP BY mb_id
                ) a
        ) a
;

 


by 보들윤 [2017.08.08 14:34:24]

마농님감사합니다^^


by 보들윤 [2017.08.08 14:34:37]

두분다 많은 도움되었습니다 감사합니다^^

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