오라클 쿼리 문의입니다. 0 4 1,181

by 시리 [SQL Query] [2017.02.01 16:34:32]


 select p.loca_id pid, count(*) cnt, count(h.prod_id) cntid, l.loca_name name
from product p 

left outer join surveyH h  
on p.prod_id = h.prod_id   

left outer join location l  
on l.loca_id = p.loca_id  


where h.surv_year = 2017 
and h.surv_no = 1


group by p.loca_id, l.loca_name 
order by p.loca_id asc
 

 

이렇게 생긴 쿼리이고 

결과값은

 

11    13    13    대전영업팀(임원실)
12    100    100    대전영업팀(사무실)
13    21    21    대전영업팀(자료실)
14    19    19    대전영업팀(회의실)
15    5    5    대전영업팀(탕비실)
16    1    1    대전영업팀(차량)
17    3    3    대전영업팀(공장동)

 

이런 식으로 나오는데 

여기서 세번째에게

and h.surv_res = 1 이런 속성을 줘서 

 

11    13    0    대전영업팀(임원실)
12    100    0    대전영업팀(사무실)
13    21    0    대전영업팀(자료실)
14    19    1    대전영업팀(회의실)
15    5    0    대전영업팀(탕비실)
16    1    0    대전영업팀(차량)
17    3    0    대전영업팀(공장동)

 

이런 식으로 값을 바꾸고 싶습니다.

sqlite에서는 

 

sql =   " select s.LOCA_ID, s.LOCA_NAME, count(s.prod_id), ifnull(p.prod_id, 0) " +
        " from SURVEY_PROD  as s " +
        " left outer join( " +
        " select loca_id, count(prod_id) as prod_id " +
        " from survey_prod " +
        " where prod_status_flg = 1 " +
        " group by loca_id " +
        " ) as p " +
        " on (p.loca_id = s.loca_id) " +
        " group by s.LOCA_ID " +
        " order by s.loca_id asc ";

요런 식으로 작성했는데 오라클에서는 잘 모르겠네요...

도움 부탁드립니다!!

by jkson [2017.02.01 16:40:25]

h.surv_res = 1 조건일 때만 count 하시겠다는 건가요?

select p.loca_id pid, count(*) cnt, count(decode(h.surv_res,1,h.prod_id)) cntid, l.loca_name

이렇게요?


by 시리 [2017.02.01 16:48:28]

오 와 저 이거 처음봤어요

제 2시간을 해결해주시다니 ㅠㅠㅠㅠㅠㅠㅠ내공시스템이라면 500점 드리고 싶네요 ㅠㅠㅠ

감사합니다


by 마농 [2017.02.01 17:34:18]

조인은 무조건 아우터 조인만 사용하는게 아닙니다.
  - 기본 이너조인에 꼭 필요할 때만 아우터 조인 쓰는 것입니다.
  - h 를 아우터 조인 했으나, Where 절에서 h 에 조건을 주면. 아우터 조인은 무효입니다
    -> 이너조인 쓰는게 맞을 듯 하구요.
    -> 혹시 0 건도 나와야 한다면? Where 조건을 On 절로 옮기셔야 합니다.
  - l 을 아우터 조인 했으나, 결과를 보면 l.loca_name 이 널인 자료는 안보이네요?
    -> 이너조인 쓰는게 맞지 않을까? 생각되네요.


by 시리 [2017.02.02 09:54:58]

제가 예전에는 0이 필요했는데 지금은 cnt가 0인 경우가 필요가 없어져서

혹시 이너조인을 쓰면 결과값이 안 나올까봐 아우터 조인으로 사용했는데

말씀 듣고 돌려 보니까 이너조인이 맞네요!

감사합니다!! 더 공부를 해야겠네요... 조인이 어렵습니다

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