데이터 분석/SQL
[쉽게 쓴 SQL] FIRST_VALUE, LAST_VALUE 함수
참치바나나
2020. 11. 6. 11:43
특정 컬럼의 첫 번째, 혹은 마지막 값을 뽑고 싶다. 예제 세팅 글
각 제품 그룹에서 가장 낮은 값을 알고 싶다 - FIRST_VALUE
SELECT
a.product_name
,b.group_name
,a.price
,FIRST_VALUE (a.price) OVER
(PARTITION BY b.group_name
ORDER BY a.price)
AS lowest_price_per_group
FROM product a
INNER JOIN product_group b
ON (a.group_id = b.group_id);

그럼 가장 비싼 값을 알고 싶다면?
SELECT
a.product_name
,b.group_name
,a.price
,FIRST_VALUE (a.price) OVER
(PARTITION BY b.group_name
ORDER BY a.price DESC)
AS lowest_price_per_group
FROM product a
INNER JOIN product_group b
ON (a.group_id = b.group_id);
각 제품 그룹에서 가장 낮은 값을 알고 싶다 - LAST_VALUE
* UNBOUND : 무한한
* PRECEDING : 이전의
* FOLLOWING : 다음의
SELECT
a.product_name
,b.group_name
,a.price
,FIRST_VALUE (a.price) OVER
(PARTITION BY b.group_name
ORDER BY a.price
RANGE BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING)
AS lowest_price_per_group
FROM product a
INNER JOIN product_group b
ON (a.group_id = b.group_id);
왜 FIRST_VALUE 와 다르게
RANGE BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING
이런 걸 써야 하는가 ?
왜냐하면 기본 값으로
RANGE BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW
세팅이 되어 있어서!
