[MySQL] 게시글1개에 대한 관련글이 있을때 COUNT 문의 드립니다. 0 6 1,079

by 홍이 [SQL Query] MySQL SQL 쿼리 [2018.10.26 10:14:29]


안녕하세요.

게시글의 상태가 완료가 된 값을 COUNT하고 싶은데 게시글에 대하여 관련글이 있을때 

COUNT를 어떻게 해야할지 막혀서 문의 드립니다.

테이블 데이터가 seqNo 하나에 manageNo가 여러개 있을수가 있는데 상태가 등록/완료/확인중 이렇게 있을때

완료가 된 값을 COUNT 하고싶습니다.

seqNo에 대하여 관련되어 있는 manageNo가 모두 완료로 상태가 되어 있어야 COUNT를 1로 하고 싶습니다.

seqNo manageNo state
1 1 등록
2 1 완료
3 1 확인중
3 2 확인중
3 3 완료
6 1 등록
7 1 완료
7 2 확인중
7 3 등록
7 4 확인중

 

원하는 결과는

완료 건수
1건

입니다.

seqNo가 3, 7은 관련글이 모두 완료되지 않아 COUNT 되지 않도록 하고 싶습니다.

감사합니다.

by 우리집아찌 [2018.10.26 10:20:28]

원하시는 결과를 어떻게 보고싶으신건가요?


by 홍이 [2018.10.26 10:35:26]

아 원하는 결과를 작성 추가 않았네요.. 수정 하겠습니다!!

 


by 우리집아찌 [2018.10.26 10:57:22]

seqNo가 3, 7은 관련글이 모두 완료되지 않아 COUNT 되지 않도록 하고 싶습니다.

-> STATE 컬럼에 완료이 존재하는데 어떤경우가 완료로 봐야하나요?


by 홍이 [2018.10.26 11:19:47]

seqNo 3번은 manageNo 1,2가 확인중이 완료로 바꼈을때 seqNo3번이 완료되어 COUNT에 1이 되도록 하고싶어서요

seqNo 7번도 마찬가지로 manageNo 2,3,4가 완료로 변경 되었을대 seqNo4번이 완료되어 COUNT가 1이 될 수 있도록 하고 싶습니다.


by 마농 [2018.10.26 11:18:14]
WITH t AS
(
SELECT 1 seqNo, 1 manageNo, '등록' state
UNION ALL SELECT 2, 1, '완료'
UNION ALL SELECT 3, 1, '확인중'
UNION ALL SELECT 3, 2, '확인중'
UNION ALL SELECT 3, 3, '완료'
UNION ALL SELECT 6, 1, '등록'
UNION ALL SELECT 7, 1, '완료'
UNION ALL SELECT 7, 2, '확인중'
UNION ALL SELECT 7, 3, '등록'
UNION ALL SELECT 7, 4, '확인중'
)
SELECT COUNT(*) complete_cnt
  FROM (SELECT seqNo
          FROM t
         GROUP BY seqNo
        HAVING COUNT(*) = COUNT(CASE WHEN state = '완료' THEN 1 END)
--        HAVING MIN(state) = '완료' AND MAX(state) = '완료'
--        HAVING COUNT(CASE WHEN state != '완료' THEN 1 END) = 0
--        HAVING MIN(CASE WHEN state = '완료' THEN 1 ELSE 0 END) = 1
        ) a
;

 


by 홍이 [2018.10.26 11:26:37]

감사합니다!!

GROUP BY로 묶고 HAVING절에서 조건으로 걸러 내면 방법이 있었네요!!

항상 답변 주시고 감사합니다

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