[MySQL] Window Function, 날짜 데이터

Lake·2024년 4월 18일

SQL

목록 보기
6/6
post-thumbnail

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

date type 을 date_format 을 이용하여 년, 월, 일, 주 로 조회해보기

    • Y (4자리)
    • y (2자리)
    • 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
내가 뭘 하고 있는건지 맞게 하고 있는건지 잘 하고 있는건지 아무것도 모르겠다.
오늘 가장 많이 한 말 : 이게 맞나....? + 이게 왜 되지?/이게 왜 안되는거지?

0개의 댓글