특정 컬럼의 첫 번째, 혹은 마지막 값을 뽑고 싶다. 예제 세팅 글
각 제품 그룹에서 가장 낮은 값을 알고 싶다 - 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 |