Window Function (윈도우 함수)
- 행과 행 간을 비교, 연산, 정의하기 위한 함수
- 분석함수 또는 순위함수라고 하기도 한다.
- 중첩(NEST)해서 사용할 수는 없지만 서브쿼리에서는 사용 가능하다.
기본 구조
윈도우 함수(컬럼) OVER (PARTITION BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
OVER는 윈도우 함수에서 필수적이다.
종류
- 순위 함수
- RANK
- ORDER BY를 포함한 쿼리문에서 특정 컬럼의 순위를 구하는 함수
- 특정 PARTITION 내에서 순위를 구할 수도 있고, 전체 데이터에 대한 순위를 구할 수도 있다.
- 동일한 값에 대해서는 동일한 순위를 부여한다.(중복 순위 허용)
-> 1, 2, 2, 4, 5
예) 1등인 행이 3개 있다면 다음 행은 4등
- DENSE_RANK
- RANK 함수와 흡사하나, 동일한 값에 대해서는 같은 순위를 부여한다.(중복 순위 허용 안함)
- 순위가 연속적이며 간격이 일정하다.
-> 1, 2, 2, 3, 4
- ROW_NUMBER
- 각 행에 대해 중복된 값이 있더라도 항상고유한 순번(번호)을 부여한다.
- pagination 작업에 주로 사용된다.
(pagination : 데이터를 일정한 크기의 페이지로 나누어 표시하는 기법. 각 페이지에는 일정한 수의 행이 포함되며, 사용자는 페이지 단위로 데이터를 볼 수 있다.)
- 파티션이 변경될 때마다 번호가 초기화된다.
추후 추가 예정
날짜 데이터
yyyy-mm-dd 형식의 컬럼을 date type 으로 변경하기
select date(date) date_type,
date
from payments
- 년
- 월
- M (January, February, March...)
- m (01, 02, 03...)
- 일
- D (1st, 2nd, 3rd...)
- d (01, 02, 03...)
- e (1, 2, 3...)
- 요일
- W (Monday, Tuesday, Wednesday...)
- w (0, 1, 2...)
(-> 일요일 0, 월요일 1, 화요일 2...)
SELECT DATE(date) date_type,
DATE_FORMAT(DATE(date), '%Y') "년",
DATE_FORMAT(DATE(date), '%m') "월",
DATE_FORMAT(DATE(date), '%e') "일",
DATE_FORMAT(DATE(date), '%w') "요일"
FROM payments p;
오늘의 TMI
내가 뭘 하고 있는건지 맞게 하고 있는건지 잘 하고 있는건지 아무것도 모르겠다.
오늘 가장 많이 한 말 : 이게 맞나....? + 이게 왜 되지?/이게 왜 안되는거지?