조인(?) 질문입니다. 0 1 1,689

by 우랭이 [SQL Query] [2017.04.21 10:27:43]


안녕하세요 조인은 아닌거같은데 몬진잘 몰라서.. 조인이라고 제목을 적긴했습니다.

각각 5개의 컬럼과 약 500개의 로우를 갖고있는 두개의 테이블이 있습니다. 두 테이블의 로우갯수는 다릅니다.

질문 내용은 table1의 1번 obs의 위경도와 table2의 전체 위경도를 비교하여

1. 위경도 간 거리가 500미터 보다 작은 로우의 갯수를 table1의 newcol이란 컬럼을 생성하여 넣고 싶습니다. (위경도간 거리 계산 쿼리는 알아두었습니다.)

2. (아니면 위경도 간 거리가 500미터 보다 작은 로우가 하나이상 존재하면 1 아니면 0을 넣어도 됩니다.)

3.또, sale와 count컬럼을 aggregation(sum or agv)하여 table1에 컬럼을 생성하여 값을 넣고 싶습니다.

그럼 소중한 답변 기다리겠습니다.

test.table1

obs name code latitude longitude -- header

1 apple a_100 -34.922345 138.60315

2 bee a_101 -34.718265 138.668655

......

test.table2

obs sale count latitude longitude -- header

1 12345 409 -34.922356 138.60313

2 89798 890 -34.922367 138.60355

....

 

by 마농 [2017.04.21 13:07:21]
MERGE INTO table1 x
USING
(
SELECT a.obs
     , COUNT(b.obs) sale_cnt
     , SUM(b.sale)  sale_sum
     , AVG(b.sale)  sale_avg
  FROM table1 a
  LEFT OUTER JOIN table2 b
    ON 위경도간거리계산공식(a.latitude, a.longitude, b.latitude, b.longitude) <= 500미터
 GROUP BY a.obs
) y
ON (x.obs = y.obs)
WHEN MATCHED THEN
UPDATE SET x.sale_cnt = y.sale_cnt
         , x.sale_sum = y.sale_sum
         , x.sale_avg = y.sale_avg
;

 

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