일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- JdbcTemplate
- Ubunt
- @JUnit
- java spring
- POJO
- XML
- @AspectJ
- spring framework
- 리눅스
- Framework
- STS
- 마이바티스
- @test
- 프로퍼티
- Spring JDBC
- spring aop
- Dependency Injection
- 컨테이너
- Linux
- SpringJDBC
- pointcut
- JDBC TEMPLATE
- AOP
- @Spring-Test
- spring
- Di
- myBatis
- unix
- java
- Spring Boot
Archives
- Today
- Total
개키우는개발자 : )
PostgreSQL LAG,LEAD 함수 본문
반응형
실습 테이블 만들기 https://dog-developers.tistory.com/154
LAG,LEAD 함수
특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 이전 행의 값 혹은 다음 행의 값을 구합니다.
실습
LAG
1. PRODUCT 테이블과 PRODUCT_GROUP 테이블을 GROUP_ID 기준으로 INNER JOIN 합니다.
2. PRICE의 이전 행의 값을 구합니다.
3. 현재 행에서 이전행의 PRICE값을 뺍니다.
4. GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬 합니다.
SELECT
A.PRODUCT_NAME,
B.GROUP_NAME,
A.PRICE,
LAG(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
A.PRICE - LAG(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B
ON (A.GROUP_ID = B.GROUP_ID)
LAPTOP을 기준으로 설명을 하자면
1행의 PRICE 이전값은 NULL 이전값이 존재하지 않으므로 이전 PRICE값을 뺀 값도 NULL이고
2행의 이전(1행) PRICE 값은 700 현재 행의 PRICE 가격도 700 뺀 가격은 0
3행의 이전(2행) PRICE 값은 700 현재 행의 PRICE 가격은 800 두 PRICE의 빼기 값은 100.. 식으로
이전행과 현재행의 PRICE 값으로 계산된 값을 조회할 수 있습니다.
- 이전,이전 행의 값도 계산이 가능합니다.
SELECT
A.PRODUCT_NAME,
B.GROUP_NAME,
A.PRICE,
LAG(A.PRICE, 2) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
A.PRICE - LAG(A.PRICE, 2) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B
ON (A.GROUP_ID = B.GROUP_ID)
LEAD
1. PRODUCT 테이블과 PRODUCT_GROUP 테이블을 GROUP_ID 기준으로 INNER JOIN 합니다.
2. PRICE의 다음 행의 값을 구합니다.
3. 현재 행에서 다음 행의 PRICE값을 뺍니다.
4. GROUP_NAME 컬럼 기준으로 PRICE컬럼으로 정렬 합니다.
SELECT
A.PRODUCT_NAME,
B.GROUP_NAME,
A.PRICE,
LEAD(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS PREV_PRICE,
A.PRICE - LEAD(A.PRICE, 1) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE) AS CUR_PREV_DIFF
FROM
PRODUCT A
INNER JOIN PRODUCT_GROUP B
ON (A.GROUP_ID = B.GROUP_ID)
이전,다음 행의 값을 현재의 행의 값과 연관되어 계산을 할때 매우 중요한 함수입니다.
반응형
'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글
PostgreSQL 실습문제2 (0) | 2019.11.09 |
---|---|
PostgreSQL 실습문제1 (0) | 2019.11.09 |
PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수 (0) | 2019.11.09 |
PostgreSQL 분석함수 AVG 함수 (0) | 2019.11.09 |
PostgreSQL 분석함수 (0) | 2019.11.09 |
Comments