티스토리 뷰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select schedule_cd
            from (
        select
                   a.manager_cd
                   ,a.schedule_cd
                   ,count(b.vm_uuid) vmCnt
                    from jdn.tb_batch_schedule_t a
                    left outer join jdn.tb_batch_vm_schedule_info_t b
                    on a.schedule_cd = b.schedule_cd
                    where a.schedule_nm = 'auto'
                    group by a.manager_cd
                            ,a.schedule_cd
                    having count(b.vm_uuid) < 4
                    limit 1 ) a
 
cs


select 안의 select 문 

schedule_cd를 얻어오는것이 목적이다.

schedule_cd는 어떤 schedule_cd 이냐면, 

한 테이블에는 스케줄러 목록이 있고 한테이블에는 각각의 스케줄러에 등록되어 있는 VM의 uuid목록이 있다.

schedule_nm이 auto이면서 그 스케줄러에 등록되어 있는 VM의 개수가 4개 이하인 스케줄러의 cd를 가져와야 한다.

left outer join 은 왼쪽 테이블의 것은 조건에 부합되지 않더라도 모두 결합되는 것이다.

결과를 보면 a 테이블의 결과가 모두 포함되어 나온다.

count(b.vm_uuid) 는 스케줄러에 등록되어 있는 vm의 개수를 알기 위한 것인데

group by 를 사용하여 schedule_cd로 그룹핑을 하여 b.vm_uuid의 count를 구하면 하나의 스케줄러에 등록되어 있는 vm의 개수를 알 수 있다.

그런데 나는 4개이하로 등록되어 있는 스케줄러의 cd를 구하기 위한 것이므로 having 절을 사용하여 조건을 주었다. 




댓글