데이터 분석/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

세팅이 되어 있어서!

'데이터 분석 > SQL' 카테고리의 다른 글

[쉽게 쓴 SQL] UNION + ALL  (0) 2020.11.06
[쉽게 쓴 SQL] LAG, LEAD 함수  (0) 2020.11.06
[쉽게 쓴 SQL] ROW_NUMBER, RANK, DENSE_RANK 차이  (0) 2020.11.06
[SQL 문법] AVG 함수  (0) 2020.11.05
[SQL 문법] 분석 함수  (0) 2020.11.05