Full-Relation Operations
Eliminating Duplicates
- 일반적인 DB 서버들은 성능 향상을 위해 기본적으로 중복을 제거하지 않음
DISTINCT
키워드를 사용하면 중복 제거 가능
Duplicates in Unions, Intersections, and Differences
- 중복 제거를 하지 않으려면
ALL
키워드를 사용
Grouping, Aggregation and Having
- Aggregation Operators
SUM
, AVG
, MIN
, MAX
, COUNT
- filter
- Syntax - SUM(<expression>) FILTER (WHERE <condition>)
- PostgreSQL에서는 지원하는데 다른 DB 서버는 지원하지 않을 수 있음
Window Function
- 행과 행 간의 관계를 정의하기 위해 제공되는 함수
- 순위, 합계, 평균, 행 위치 등을 조작할 수 있음
window_function(arg1, arg2, ...) OVER (
[PARTITION BY partition_expression]
[ORDER BY sort_expression [ASC | DESC]]
[frame_clause]
)
Aggregation Function vs Window Function
- Aggregation Function - 그룹당 하나의 값이 결과로 나옴
- Window Function - 그룹 별로 별도로 값이 나올 수 있음
Partition
OVER
안의 PARTITION BY
절은 PARTITION BY 표현식의 같은 값을 공유하는 행들을 파티션(그룹)으로 나눔
- 각 행에 대해 window function은 현재 행과 같은 파티션에 있는 행들과 계산됨
- PARTITION BY 절이 없으면 모든 행을 포함하는 하나의 파티션이 생김
Window Frame
sum()
, count()
와 같은 window function들은 모든 파티션의 행이 아니라 window frame의 행에서 실행된다.
- 기본적으로
ORDER BY
가 제공되면 window frame은 파티션이 시작부터 현재 행까지의 모든 행으로 구성되며 ORDER BY 절에 따라서
ORDER BY
가 없으면 기본 frame은 파티션의 모든 행으로 구성됨
Window Function Example
SELECT title, year,
row_number() over () from movie;
SELECT title, year,
row_number() over (order by title, year)
FROM movie
ORDER BY title, year;
SELECT title, year, studioname,
row_number() over (
partition by studioname
)
FROM movie;
SELECT title, year, studioname,
row_number() over (
partition by studioname
order by year
)
FROM movie;
SELECT title, year, studioname,
COUNT(studioname) over (partition by studioname)
FROM movie;
일반적인 window function
- rank()
- 현재 행의 순위. 1, 2, 2, 4 와 같이 매김(순위 중복 o)
- dense_rank()
- 현재 행의 순위. 1, 2, 3, 4 와 같이 매김(순위 중복 x)
- nth_value(value any, nth integer)
- SUM, AVG, MIN, MAX, COUNT
Uploaded by Notion2Tistory v1.1.0