통계 쿼리 질문드립니다 0 6 605

by 호날두 [MySQL] [2018.11.15 11:26:34]


문의 게시글을 1팀:2개, 2팀:3개, 3팀:1개 작성하였고

관리팀에서 답변은 1팀:1개, 2팀:1개, 3팀:1개  작성하였다고 한다면

쿼리로

팀     문의     답변

1팀     2          1

2팀     3          1

3팀     1          1

이렇게 나오게 하려면 어떻게 해야 하나요??

 

SELECT team, 
       SUM(CASE WHEN type = '1' THEN 1 ELSE) as type1,
       SUM(CASE WHEN type = '2' THEN 1 ELSE) as type2,
GROUP BY team

이 쿼리로 하면 1~3팀은 요청글만 관리팀은 답변글만 달았다고 나올텐데

저는 제가 위에 작성한듯이 1팀의 요청글에 답변이라면 1팀 답변으로 체크 하고 싶은데 어떻게 해야 할지

감이 안오네요 도움 부탁드립니다

 

by 마농 [2018.11.15 11:38:04]

결과표만 올리셨네요? 원본도 보여주세요.


by 호날두 [2018.11.15 15:15:49]

본문에 적힌 쿼리로 작성하였을경우

결과가

팀       문의       답변

1팀       2           0

2팀       3           0

3팀       1           0

관리팀    0           3

입니다

그리고 제가 모든 문의 게시판에 데이터 다 가져와서 루프 돌면서 결과표 처럼 나오게는 했는데 속도가 너무 

느려져서 쿼리에서 해결해야 할 거 같아서 도움 요청 드립니다


by 마농 [2018.11.15 15:32:38]

원본 테이블이 어떻게 생겼는지를 보여주셔야 도와드리죠..


by 호날두 [2018.11.15 16:28:30]
`seq` INT(11) NOT NULL AUTO_INCREMENT, `content_no` INT(11) NOT NULL COMMENT '게시글 번호', `board_no` INT(11) NOT NULL COMMENT '게시판 번호', `grp_no` INT(11) NOT NULL COMMENT '최상위 글 번호', `parent` INT(11) NULL DEFAULT NULL COMMENT '상위 글 번호', `grp_ord` INT(11) NULL DEFAULT NULL COMMENT '정렬순서', `depth` INT(11) NOT NULL COMMENT '들여쓰기 순서', `comment_cnt` INT(11) NOT NULL COMMENT '코멘트 등록수', `click_cnt` INT(11) NOT NULL COMMENT '클릭수', `title` VARCHAR(100) NOT NULL COMMENT '제목' COLLATE 'utf8_unicode_ci', `content` TEXT NOT NULL COMMENT '내용' COLLATE 'utf8_unicode_ci', `noti_yn` ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '공지등록 여부' COLLATE 'utf8_unicode_ci', `category` VARCHAR(1) NOT NULL DEFAULT 'N' COMMENT '게시글 타입' COLLATE 'utf8_unicode_ci', `division2` INT(11) NOT NULL COMMENT '팀', `reg_date` DATE NULL DEFAULT NULL, `reg_time` TIME NULL DEFAULT NULL, `reg_emp` INT(11) NULL DEFAULT NULL 입니다

by 마농 [2018.11.15 16:43:39]

테이블 명세서를 보여달라는게 아니구요.
어떤 값들이 어떻게 들어 있는지
쿼리 작성에 필요한 항목만 샘플로 보여주시면 됩니다.
1. 본글과 답글을 구별할 수 있는 항목과 판별 기준값이 뭔지?
2. 본글과 답글을 연결해주는 항목
3. 팀을 구별할 수 있는 항목
등이 필요하겠네요.
이러한 항목들이 포함된 샘플 자료가 있어야 판단이 가능하죠.


by 마농 [2018.11.15 16:45:53]

제가 샘플을 만들어 봤습니다. 실제와 다를 수는 있습니다.

WITH t AS
(
SELECT 1 content_no, 1 division2, 0 grp_no, 1 category
UNION ALL SELECT 2, 1, 0, 1
UNION ALL SELECT 3, 2, 0, 1
UNION ALL SELECT 4, 2, 0, 1
UNION ALL SELECT 5, 2, 0, 1
UNION ALL SELECT 6, 3, 0, 1
UNION ALL SELECT 7, 4, 1, 2
UNION ALL SELECT 8, 4, 3, 2
UNION ALL SELECT 9, 4, 6, 2
)
SELECT a.division2
     , COUNT(*) cnt_1
     , COUNT(b.grp_no) cnt_2
  FROM t a
  LEFT OUTER JOIN t b
    ON a.content_no = b.grp_no
 WHERE a.category = '1'
 GROUP BY a.division2
;

 

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