SQL 고급: 윈도우 함수와 날짜 계산

ya·2025년 3월 27일

DataBase와 SQL

목록 보기
5/12
post-thumbnail

SQL 내장 함수 📊

1. 단일행 함수

숫자 함수 🔢:

  • ABS(x): 절대값을 반환합니다.
    예: ABS(-10)10
  • CEIL(x): 숫자보다 크거나 같은 최소의 정수를 반환합니다.
    예: CEIL(4.1)5
  • FLOOR(x): 작거나 같은 최대의 정수를 반환합니다.
    예: FLOOR(4.1)4
  • ROUND(x, d): 소수점 d자리까지 반올림하여 숫자를 반환합니다.
    예: ROUND(4.5678, 2)4.57
  • TRUNCATE(x, d): 숫자를 소수점 d자리까지 잘라냅니다 (반올림하지 않음).
    예: TRUNCATE(4.5678, 2)4.56
  • MOD(x, y): x를 y로 나눈 나머지를 반환합니다.
    예: MOD(10, 3)1

문자 함수 (문자 반환) 🔠:

  • TRIM(str): 문자열 양쪽에 있는 지정된 문자를 제거합니다. 기본적으로 공백을 제거합니다.
    예: TRIM(' hello ')'hello'
  • UPPER(str): 문자열을 대문자로 변환합니다.
    예: UPPER('hello')'HELLO'
  • LOWER(str): 문자열을 소문자로 변환합니다.
    예: LOWER('HELLO')'hello'

문자 함수 (숫자 반환) 🔢:

  • ASCII(str): 문자에 대응하는 아스키 코드를 반환합니다.
    예: ASCII('A')65
  • LENGTH(str): 문자열의 길이를 반환합니다 (바이트 단위로 계산).
    예: LENGTH('한글')6 (한글은 3바이트로 계산)
  • CHAR_LENGTH(str): 문자의 개수를 반환합니다 (문자 단위로 계산).
    예: CHAR_LENGTH('한글')2
  • SUBSTR(str, start, length): 문자열의 일부를 잘라서 반환합니다.
    예: SUBSTR('abcdef', 2, 3)'bcd'

날짜/시간 함수 📅:

  • STR_TO_DATE(str, format): 문자열을 날짜 형식으로 변환합니다.
    예: STR_TO_DATE('2025-03-27', '%Y-%m-%d')2025-03-27
  • DATE_FORMAT(date, format): 날짜를 문자열로 변환합니다.
    예: DATE_FORMAT('2025-03-27', '%Y-%m-%d')'2025-03-27'
  • DATE(date): 날짜 부분만 반환합니다.
    예: DATE('2025-03-27 14:00:00')2025-03-27
  • DATEDIFF(date1, date2): 두 날짜 간의 차이를 반환합니다 (일 단위).
    예: DATEDIFF('2025-03-27', '2025-03-20')7
  • SYSDATE(): 현재 날짜와 시간을 반환합니다.
    예: SYSDATE()2025-03-27 12:00:00

NULL 관련 함수 ❓:

  • IS NULL: 값이 NULL인지 확인합니다.
    예: column_name IS NULL → 해당 값이 NULL이면 TRUE
  • IS NOT NULL: 값이 NULL이 아닌지 확인합니다.
    예: column_name IS NOT NULL → 해당 값이 NULL이 아니면 TRUE
  • IFNULL(expr, alt_value): 첫 번째 값이 NULL일 경우 두 번째 값을 반환합니다.
    예: IFNULL(NULL, 'default')'default'

2. 집계 함수 🔍

집계 함수는 여러 행의 데이터를 하나의 값으로 요약하는 함수입니다. 예:

  • COUNT(*): 행의 개수를 반환합니다.
  • SUM(column): 해당 열의 합을 반환합니다.
  • AVG(column): 해당 열의 평균을 반환합니다.
  • MIN(column): 해당 열의 최소값을 반환합니다.
  • MAX(column): 해당 열의 최대값을 반환합니다.

예시:

SELECT COUNT(*), AVG(price)
FROM products;

이 쿼리는 products 테이블의 모든 행 수와 가격의 평균을 계산합니다.


3. 윈도우 함수 (분석 함수) 🧮

윈도우 함수는 결과를 창(window)으로 나누어 계산하는 함수입니다. 각 행을 기준으로 값을 계산할 수 있습니다.

ROW_NUMBER(), RANK(), DENSE_RANK() 등:

  • ROW_NUMBER(): 각 행에 고유한 순번을 부여합니다. 순위가 동일한 값에도 별개의 번호를 부여합니다.
  • RANK(): 동일한 값에 대해 같은 순위를 부여하며, 그 뒤의 순위는 건너뛰기 (1, 2, 2, 4, 5...)
  • DENSE_RANK(): RANK()와 비슷하지만, 순위 건너뛰기가 없음 (1, 2, 2, 3, 4...)
  • PERCENT_RANK(): 백분율 순위를 계산하여 0과 1 사이의 값으로 반환합니다.

예시:

SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;

이 쿼리는 학생들의 점수를 기준으로 순위를 매깁니다.


4. 날짜 차이 계산 📆

  • DATEDIFF(now(), 입사일) → 현재 날짜와 입사일의 차이(근무일수) 계산합니다.
  • DATE_ADD(date, INTERVAL n DAY) → 날짜에 n일 추가합니다.
  • DATE_SUB(date, INTERVAL n DAY) → 날짜에서 n일 빼기합니다.

예시:

SELECT DATEDIFF(NOW(), '2022-01-01') AS work_days;

위 쿼리는 2022년 1월 1일 이후 현재까지의 근무일 수를 반환합니다.

profile
ya로그

0개의 댓글