Post

표준 SQL 함수 정리

표준 SQL 함수와 관련 개념

표준 SQL 함수 정리

집계 함수

함수설명사용법 예시 (PostgreSQL)
COUNT()행 개수 계산COUNT(*), COUNT(DISTINCT column)
SUM()숫자 합계SUM(column)
AVG()숫자 평균AVG(column)
MIN()최솟값MIN(column)
MAX()최댓값MAX(column)

NULL 처리 함수

함수설명사용법 예시 (PostgreSQL)
COALESCE()NULL 값 대체 (첫 번째 non-NULL 값 반환)COALESCE(column, default)
NULLIF()두 값이 같으면 NULL, 다르면 첫 번째 값 반환NULLIF(col1, col2)

조건문

함수설명사용법 예시 (PostgreSQL)
CASE조건부 로직 처리CASE WHEN condition THEN value1 ELSE value2 END

조인과 서브쿼리

개념설명사용법 예시 (PostgreSQL)
INNER JOIN일치하는 행 결합SELECT a.col FROM table1 a INNER JOIN table2 b ON a.id = b.id
LEFT JOIN왼쪽 테이블의 모든 행 포함SELECT a.col FROM table1 a LEFT JOIN table2 b ON a.id = b.id
RIGHT JOIN오른쪽 테이블의 모든 행 포함SELECT a.col FROM table1 a RIGHT JOIN table2 b ON a.id = b.id
CROSS JOIN모든 행 조합 (카티션 곱)SELECT a.col, b.col FROM table1 a CROSS JOIN table2 b
EXISTS서브쿼리로 존재 여부 확인WHERE EXISTS (SELECT 1 FROM table2 WHERE col = table1.col)
IN서브쿼리로 존재 여부 확인WHERE column IN (SELECT col FROM table2)

윈도우 함수 목록

함수설명사용법 예시 (PostgreSQL)
RANK()동일 값에 같은 순위 부여, 다음 순위 건너뜀 (예: 1, 1, 3)RANK() OVER (PARTITION BY column ORDER BY column)
DENSE_RANK()동일 값에 같은 순위 부여, 다음 순위 연속 (예: 1, 1, 2)DENSE_RANK() OVER (PARTITION BY column ORDER BY column)
ROW_NUMBER()동일 값에도 고유 순위 부여 (예: 1, 2, 3)ROW_NUMBER() OVER (PARTITION BY column ORDER BY column)
LEAD()다음 특정 행 값 가져오기- 기본(다음 1행): LEAD(column) OVER (PARTITION BY column ORDER BY column)
- 다음 3행: LEAD(column, 3) OVER (PARTITION BY column ORDER BY column)
LAG()이전 특정 행 값 가져오기- 기본(이전 1행): LAG(column) OVER (PARTITION BY column ORDER BY column)
- 이전 3행: LAG(column, 3) OVER (PARTITION BY column ORDER BY column)
FIRST_VALUE()파티션 내 첫 번째 값FIRST_VALUE(column) OVER (PARTITION BY column ORDER BY column)
LAST_VALUE()파티션 내 마지막 값 (⚠️ 프레임 지정 필요)LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
NTH_VALUE()파티션 내 특정 번째 행 값 가져오기- 두 번째 행: NTH_VALUE(column, 2) OVER (PARTITION BY column ORDER BY column)
SUM()파티션 내 누적/집계 계산SUM(column) OVER (PARTITION BY column ORDER BY column)
COUNT()파티션 내 누적/집계 계산COUNT(column) OVER (PARTITION BY column ORDER BY column)
AVG()파티션 내 누적/집계 계산AVG(column) OVER (PARTITION BY column ORDER BY column)

문자열 함수

함수설명사용법 예시 (PostgreSQL)
CONCAT()문자열 결합CONCAT(col1, col2)
SUBSTRING()문자열 일부 추출SUBSTRING(column FROM 1 FOR 3)
TRIM()문자열 공백 제거TRIM(BOTH FROM column)
LTRIM()문자열 왼쪽 공백 제거LTRIM(column)
RTRIM()문자열 오른쪽 공백 제거RTRIM(column)
STRING_AGG()- 문자열을 지정한 구분자로 결합
- 정렬 및 중복 제거 가능
- 기본: STRING_AGG(column, ',')
- 정렬: STRING_AGG(column, ',' ORDER BY column)
- 중복 제거: STRING_AGG(DISTINCT column, ',' ORDER BY column)

날짜/시간 함수

함수설명사용법 예시 (PostgreSQL)
EXTRACT()날짜/시간에서 연도, 월 등 추출EXTRACT(YEAR FROM date_column)
INTERVAL날짜/시간 간격 처리date_column + INTERVAL '1 day'

수학 함수

함수설명사용법 예시 (PostgreSQL)
CEIL()숫자 올림CEIL(value)
FLOOR()숫자 내림FLOOR(value)
MOD()나머지 연산MOD(dividend, divisor)

타입 변환 및 기타 함수

함수설명사용법 예시 (PostgreSQL)
ROUND()숫자 반올림ROUND(value, 2)
CAST()데이터 타입 변환CAST(column AS TEXT)

집합 연산

개념설명사용법 예시 (PostgreSQL)
UNION두 결과 집합 결합 (중복 제거)SELECT col FROM table1 UNION SELECT col FROM table2
UNION ALL두 결과 집합 결합 (중복 포함)SELECT col FROM table1 UNION ALL SELECT col FROM table2
INTERSECT두 결과 집합의 교집합SELECT col FROM table1 INTERSECT SELECT col FROM table2
EXCEPT첫 결과 집합에서 두 번째 집합 제외SELECT col FROM table1 EXCEPT SELECT col FROM table2

논리 연산 및 서브쿼리 확장

개념설명사용법 예시 (PostgreSQL)
AND논리곱 연산WHERE col1 > 0 AND col2 IS NOT NULL
OR논리합 연산WHERE col1 > 0 OR col2 IS NOT NULL
NOT논리 부정 연산WHERE NOT (col1 > 0)
ANY서브쿼리 값 중 하나라도 조건 만족 시 TRUEWHERE column > ANY (SELECT value FROM table)
ALL서브쿼리 모든 값이 조건 만족 시 TRUEWHERE column > ALL (SELECT value FROM table)

필수 개념

개념설명사용법 예시 (PostgreSQL)
서브쿼리와 CTE복잡한 로직 단계별 분리WITH cte AS (SELECT ...) SELECT FROM cte
WITH RECURSIVE재귀 쿼리로 계층 구조 처리WITH RECURSIVE cte AS (<br>SELECT id FROM table WHERE parent_id IS NULL<br>UNION ALL<br>SELECT t.id FROM table t JOIN cte c ON t.parent_id = c.id<br>) SELECT * FROM cte

윈도우 함수 문법

개념설명사용법 예시 (PostgreSQL)
Window Functions행 집합에 대해 계산 수행SUM() OVER(), AVG() OVER()
OVER clause윈도우 범위 정의OVER (PARTITION BY column ORDER BY column)
PARTITION BY윈도우 그룹화PARTITION BY user_id
ORDER BY (윈도우 내)프레임 정렬 기준ORDER BY date

프레임 지정

개념설명사용법 예시 (PostgreSQL)
ROWS BETWEEN물리적 행 기반 프레임 범위 지정ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
RANGE BETWEEN논리적 값 기반 프레임 범위RANGE BETWEEN INTERVAL '6' DAY PRECEDING AND CURRENT ROW
PRECEDING현재 행 이전 범위6 PRECEDING
FOLLOWING현재 행 이후 범위6 FOLLOWING
CURRENT ROW현재 행CURRENT ROW
UNBOUNDED PRECEDING파티션 시작까지 무제한ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
UNBOUNDED FOLLOWING파티션 끝까지 무제한ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING

윈도우 함수 응용 패턴

개념설명사용법 예시 (PostgreSQL)
Running Total누적 합계SUM(column) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
Moving Average이동 평균AVG(column) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
Rolling Sum이동 합계SUM(column) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
This post is licensed under CC BY 4.0 by the author.