Global It Leader!!



 
 

Mysql 셀프 조인 업데이트 석차구하기

페이지 정보

작성자 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 4,972회 작성일 12-03-10 18:51

본문

1 문제의 SQL문장 #
예제에서는 #temp가 몇 건 되지 않지만, 실제로는 4천 만 건 가량이었다.

--drop table #temp
create table #temp(
 a varchar(20)
, i int
, ranking int
)

insert #temp(a, i) values('a', 1)
insert #temp(a, i) values('a', 2)
insert #temp(a, i) values('a', 3)
insert #temp(a, i) values('b', 10)
insert #temp(a, i) values('c', 5)
insert #temp(a, i) values('b', 7)
insert #temp(a, i) values('e', 8)

select * from #temp order by 1,2
/*
a                    i           ranking
-------------------- ----------- -----------
a                    1           NULL
a                    2           NULL
a                    3           NULL
b                    7           NULL
b                    10          NULL
c                    5           NULL
e                    8           NULL
*/

update a
set a.ranking = b.ranking
from #temp a
 inner join (
  select
   a
  , i
  , rank() over(partition by a order by i) ranking
  from #temp) b
 on a.a = b.a
 and a.i = b.i

select * from #temp order by 1,2 
/*
a                    i           ranking
-------------------- ----------- -----------
a                    1           1
a                    2           2
a                    3           3
b                    7           1
b                    10          2
c                    5           1
e                    8           1
*/


이 SQL은 셀프 조인으로 Merge Join으로 풀리면서 4천 만 건에 대한 1회의 정렬도 포함되었다. 또한 2번의 풀스캔을 한다. 필자는 다음과 같은 방식으로 1회의 풀스캔으로 풀리게 하였다.

 

[edit]2 해결 방안 #
update a
set ranking = up_ranking
from (
 select
  a
 , i
 , ranking
 , rank() over(partition by a order by i) up_ranking
 from #temp) a


필자는 알고 있던 것이 아니고, 고민을 하다가 View 연산의 일종이므로 되리라 생각하고 밑져야 본전의 심정으로 해봤다. 그런데 실행이 잘 되는 것이 아닌가? 허허..

 

댓글목록

등록된 댓글이 없습니다.

전체 440
게시물 검색
컴퓨터언어 목록
번호 제목 글쓴이 조회 날짜
120 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6892 03-21
119 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5041 03-21
118 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5277 03-21
117 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5224 03-21
116 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5913 03-15
115 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5307 03-15
114 그누보드스킨 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 17061 03-15
열람중 Mysql no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4973 03-10
112 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5545 03-10
111 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5210 03-10
110 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5938 03-09
109 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5420 03-08
108 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4909 03-08
107 Mysql no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6409 03-05
106 Mysql no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5268 03-05
105 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5007 03-04
104 Mysql no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4977 03-04
103 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5505 03-01
102 Javasript no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5286 03-01
101 PHP no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5382 02-29