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