FAQ
특정 컬럼의 값들을 ordering하여 다음 값과의 차이를 구하는 SQL
분류 SQL 등록일 2013-07-09 조회수 2270
bluetheme 2005-09-07 39


특정 컬럼의 값들을 ordering하여 다음 값과의 차이를 구하는 SQL
+++++++++++++++++++++++++++++++++++++++

요약
++++
아래의 예와 같은 결과를 도출하기 위한 쿼리

- T1 테이블 : 9
1
5
3
8

- 원하는 결과 : 2 (1과 3의 차리)
2 (3와 5의 차이)
3 (5와 8의 차이)
1 (8와 9의 차이)

SQL 1
+++++++
select
(select min(v2.i1) - v1.i1 from t1 v2 where v2.i1 > v1.i1 )
from t1 v1
where v1.i1 > 0
order by i1
;


SQL 2
+++++++
select
v1.i1 AS PREV_VALUE,
MIN(v2.i1) AS NEXT_VALUE,
MIN(v2.i1) - v1.i1 AS DIFF_VALUE
from t1 v1, t1 v2
where v2.i1> v1.i1
group by v1.i1
order by v1.i1;

** 원작자는 이경모씨입니다.
이런 형태의 쿼리를 수행했을 때
소량의 데이터에서는 SQL1이 성능이 좀 더 빠르거나 대동소이한 결과를 보였으나
대량에 데이터에 대해서는 SQL2의 성능이 훨씬 더 나았습니다.
목록