일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hive
- GIT
- Google Excel
- Python
- Mac
- array
- Excel
- 파이썬
- numpy
- list
- SQL
- PostgreSQL
- c#
- Github
- math
- string
- Java
- matplotlib
- Google Spreadsheet
- gas
- Apache
- Redshift
- PySpark
- Kotlin
- Tkinter
- PANDAS
- dataframe
- google apps script
- django
- Today
- Total
달나라 노트
Redshift : first_value, last_value (첫 번째 값, 마지막 값 뽑기window function) 본문
Redshift : first_value, last_value (첫 번째 값, 마지막 값 뽑기window function)
CosmosProject 2021. 2. 18. 13:38
first_value, last_value는 window function으로서 이용 가능합니다.
first_value([column_name]) over(partition by [column_name] order by [column_name] rows between ~~ and ~~)
last_value([column_name]) over(partition by [column_name] order by [column_name] rows between ~~ and ~~)
예시를 보면 위처럼 사용할 수 있습니다.
해석을 해보면
partition by [column_name] = 이 컬럼을 parititon으로 나눠서
order by [column_name] = 이 컬럼 기준으로 정렬을 한 후
first_value([column_name]) = 이 컬럼의 첫 번째(가장 위쪽) 값을 뽑아냅니다.
last_value([column_name]) = 이 컬럼의 마지막 (가장 아래쪽) 값을 뽑아냅니다.
예시 테이블Table Name : salary_list
id | part | name | salary |
1 | First_Part | One | 1000 |
2 | First_Part | Two | 1900 |
3 | First_Part | Three | 1400 |
4 | First_Part | Four | 1700 |
5 | First_Part | Five | 1400 |
6 | Second_Part | Six | 1900 |
7 | Second_Part | Seven | 1200 |
8 | Second_Part | Eight | 1200 |
9 | Second_Part | Nine | 1200 |
10 | Second_Part | Ten | 1300 |
select *
, first_value(name) over (partition by part order by id rows between unbounded preceding and unbounded following) as col_first_value
, last_value(name) over (partition by part order by id rows between unbounded preceding and unbounded following) as col_last_value
from salary_list
;
- Result Set
id | part | name | salary | col_first_value | col_last_value |
1 | First_Part | One | 1000 | One | Five |
2 | First_Part | Two | 1900 | One | Five |
3 | First_Part | Three | 1400 | One | Five |
4 | First_Part | Four | 1700 | One | Five |
5 | First_Part | Five | 1400 | One | Five |
6 | Second_Part | Six | 1900 | Six | Ten |
7 | Second_Part | Seven | 1200 | Six | Ten |
8 | Second_Part | Eight | 1200 | Six | Ten |
9 | Second_Part | Nine | 1200 | Six | Ten |
10 | Second_Part | Ten | 1300 | Six | Ten |
위 결과를 봅시다.
col_first_value는 part column을 기준으로 partition을 나눈 후 id 컬럼 기준으로 order by를 했을 때 name컬럼의 첫 번째 값을 반환합니다.
따라서 id가 1~5인 행에 대해서 가장 첫 번째 값인 One을 반환하고
id가 6~10인 행에 대해서 가장 첫 번째 값인 Six를 반환합니다.
또한 window function이기 때문에 원본 table data에는 변함이 없고 새로운 컬럼(col_first_value 컬럼)이 생성되었습니다.
col_last_value는 part column을 기준으로 partition을 나눈 후 id 컬럼 기준으로 order by를 했을 때 name컬럼의 마지막 값을 반환합니다.
따라서 id가 1~5인 행에 대해서 가장 마지막 값인 Five를 반환하고
id가 6~10인 행에 대해서 가장 마지막 값인 Ten을 반환합니다.
또한 window function이기 때문에 원본 table data에는 변함이 없고 새로운 컬럼(col_last_value컬럼)이 생성되었습니다.
'SQL > Redshift' 카테고리의 다른 글
Redshift : unload & copy (Parquet format으로 s3 서버에 query 결과 upload하기, s3서버에서 파일 불러와 database table 만들기) (0) | 2021.06.03 |
---|---|
Redshift : date_add (날짜 더하고 빼기, add or subtract specified interval from a date) (0) | 2021.02.22 |
Redshift : date_trunc (지정한 날짜 단위 기준으로 날짜 자르기) (0) | 2021.02.18 |
Redshift : datediff (두 시점간의 차이 구하기) (0) | 2021.01.28 |
Redshift : to_char (timestamp 또는 date를 문자로 변환) (0) | 2021.01.22 |