Sqlite count 관련 질문입니다. 0 2 1,207

by 시리 [DB 기타] sqlite [2017.02.24 11:36:47]


조회 해야 할 것: 총 4개

1. loca_name (위치명)

2. loca_id (위치의 pk인 id)

3. surv_id (총 대상수)

4. surv_status_flg 가 9가 아닌 surv_id

 

 

인데

 

원래는 제 역량의 부족으로 인해

 

  select a.loca_name, a.loca_id, ifnull(b.surv_id, 0)  
                         from location as  a  
                         left outer join(  
                         select loca_id, count(surv_id) as surv_id  
                         from survey_his  
                         group by loca_id  
                         ) as b   
                         on (a.loca_id = b.loca_id)  
                         group by a.loca_id ;

 

이렇게 3개를 리턴하고


                 select a.loca_name, a.loca_id, ifnull(b.surv_id, 0)  
                         from location as a  
                         left outer join(  
                         select loca_id, count(surv_id) as surv_id  
                         from survey_his  
                         where surv_status_flg <> 9
                         group by loca_id  
                         ) as b   
                         on (a.loca_id = b.loca_id)  
                         group by a.loca_id ;

 

또 이렇게 3개를 리턴해서 하나만 가져오는 식으로 사용했는데

 

쿼리 결과값이 첫 번째 쿼리가

"기타부서"    "1"    "0"
"강남지원"    "2"    "6"
"경영지원팀"    "3"    "2"
"지원사무실"    "4"    "582"
"사업지원팀"    "5"    "0"
"시험분석팀"    "6"    "0"
"개성검사센터"    "7"    "0"
"제품검사팀"    "8"    "0"

이렇게 나오는 경우 0을 배제하기 위해 또 제가 0을 제거하는 함수를 돌려야 해서

 

select a.loca_name, a.loca_id, count(b.surv_id)
 from location as  a , survey_his as b
on a.loca_id = b.loca_id 
group by a.loca_id ;

 

이런 식으로 하나의 쿼리문으로 변환하려 하는데 가능한 것인지 궁금합니다

 

저거의 결과값은

"강남지원"    "2"    "6"
"경영지원팀"    "3"    "2"
"지원사무실"    "4"    "582"

이렇게 0이 없는 상태로 나오는데

 

조건절을 넣어서

surv_status_flg의 count 수가 0인 경우에도

앞의 surv_id가 있는 경우에만 0을 출력하도록 변경 가능할까요?

"강남지원"    "2"    "6" "0" 
"경영지원팀"    "3"    "2" "0"
"지원사무실"    "4"    "582" "0"

원하는 결과값은 이러한 형태인데

 

제가 제작한 것은

 

"기타부서"    "1"    "0"  "0"
"강남지원"    "2"    "6" "0"
"경영지원팀"    "3"    "2" "0"
"지원사무실"    "4"    "582" "0"
"사업지원팀"    "5"    "0" "0"
"시험분석팀"    "6"    "0" "0"
"개성검사센터"    "7"    "0" "0"
"제품검사팀"    "8"    "0""0"

이런 식으로 0을 모두 뽑아줍니다.

 

어떤 식으로 변경해야 할 지 방향을 가르쳐 주시면 감사하겠습니다 ㅠㅠ...

by 마농 [2017.02.24 13:04:59]
SELECT a.loca_name
     , a.loca_id
     , COUNT(*) cnt_1
     , COUNT(CASE WHEN b.surv_status_flg <> 9 THEN 1 END) cnt_2
  FROM location a
 INNER JOIN survey_his b
    ON a.loca_id = b.loca_id
 WHERE b.surv_id IS NOT NULL
 GROUP BY a.loca_id, a.loca_name
;

 


by 시리 [2017.02.24 13:14:23]

헐 count 안에도 case문을 넣을 수가 있군요...

where 절에 열심히 넣고 있었는데 count 안에 넣어야 하는 것을 오늘 배웠습니다 (...)

감사합니다 ㅠㅠ...

항상 소중한 시간에 많은 것을 가르쳐 주셔서 감사드립니다 ㅠㅠ...

뵐 때 마다 쿼리 공부를 더 열심히 해야겠다고 느끼네요!!!

 

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