※ 함수(Function)란?
함수(Function)란 데이터를 입력받아 계산, 가공, 변환 등의 처리를 수행하고
결과를 반환하는 SQL의 내장 기능입니다.
데이터를 집계하거나 조건에 따라 변환하거나,
날짜·문자열을 다룰 때 매우 유용합니다.
SQL 함수는 크게 다음과 같이 분류됩니다.
| 함수 종류 | 설명 | 예시 |
|---|---|---|
| 수치 함수 | 숫자 계산 및 변환 | ROUND, CEIL, FLOOR, ABS |
| 문자열 함수 | 문자열 조작 및 검색 | CONCAT, SUBSTRING, LENGTH, REPLACE |
| 날짜 함수 | 날짜/시간 관련 처리 | NOW, DATE_FORMAT, DATEDIFF |
| 시스템 함수 | DB 정보, 사용자 정보 | DATABASE, USER, VERSION |
| 집계 함수 | 여러 행을 집계하여 하나의 값 반환 | SUM, AVG, MAX, MIN, COUNT |
※ 수치 함수
-- 절댓값 반환
SELECT ABS(-15); -- 15
-- 올림 / 내림
SELECT CEIL(4.3); -- 5
SELECT FLOOR(4.7); -- 4
-- 반올림
SELECT ROUND(3.14159, 2); -- 3.14
→ 수치 함수는 통계 계산, 가격 처리 등 수치 기반 분석에서 자주 사용됩니다.
※ 문자열 함수
-- 문자열 결합
SELECT CONCAT('Hello', ' ', 'World'); -- Hello World
-- 부분 문자열 추출
SELECT SUBSTRING('DataScience', 1, 4); -- Data
-- 문자열 길이
SELECT LENGTH('AI'); -- 2
-- 특정 문자 교체
SELECT REPLACE('Hello Python', 'Python', 'SQL'); -- Hello SQL
→ 문자열 처리는 데이터 레이블링, 텍스트 데이터 분석 등에 필수적으로 활용됩니다.
※ 날짜 함수
-- 현재 날짜/시간
SELECT NOW(); -- 2025-10-07 20:10:00
-- 날짜 형식 변경
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 2025-10-07
-- 두 날짜 차이 계산
SELECT DATEDIFF('2025-12-31', '2025-10-01'); -- 91
→ 날짜 함수는 로그 분석, 사용자 가입일 계산, 기간별 통계 등에서 활용됩니다.
※ NULL 처리 함수
데이터베이스에서 NULL은 “값이 없음”을 의미합니다.
계산이나 비교 시 주의해야 하며, 이를 처리하기 위한 함수들이 있습니다.
-- NULL을 다른 값으로 대체
SELECT IFNULL(email, '등록되지 않음') FROM student;
-- 여러 값 중 NULL이 아닌 첫 번째 반환
SELECT COALESCE(NULL, NULL, '대체값'); -- 대체값
→ NULL을 처리하지 않으면 의도치 않은 계산 오류나 조건 실패가 발생할 수 있습니다.
※ 조건 함수 (CASE / IF)
조건에 따라 다른 값을 반환해야 할 때는 CASE 또는 IF를 사용합니다.
-- CASE 문
SELECT name, score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM grade;
-- IF 함수 (간단한 조건)
SELECT name, IF(score >= 60, '합격', '불합격') AS result
FROM grade;
→ 조건 함수를 사용하면 SQL 안에서 로직 처리를 할 수 있어,
애플리케이션 코드 의존성을 줄일 수 있습니다.
※ 집계 함수 (Aggregate Functions)
집계 함수는 여러 행을 그룹화하여 하나의 결과 값을 반환합니다.
통계나 리포트 생성에 매우 자주 사용됩니다.
SELECT
COUNT(*) AS 학생수,
AVG(score) AS 평균점수,
MAX(score) AS 최고점수,
MIN(score) AS 최저점수,
SUM(score) AS 총점
FROM grade;
→ 집계 함수는 WHERE 절 뒤, GROUP BY 앞에서 사용합니다.
※ GROUP BY – 그룹별 집계
GROUP BY는 데이터를 특정 기준으로 그룹화하여 집계할 때 사용합니다.
-- 전공별 평균 점수 계산
SELECT major, AVG(score) AS 평균점수
FROM student s
JOIN grade g ON s.student_id = g.student_id
GROUP BY major;
-- 과목별 최고 점수
SELECT subject, MAX(score) AS 최고점수
FROM grade
GROUP BY subject;
→ GROUP BY를 사용하면 단순 조회에서 나아가 통계 분석과 보고서 생성이 가능해집니다.
※ HAVING – 그룹 조건 지정
HAVING은 GROUP BY 이후 결과에 조건을 적용할 때 사용합니다.
(WHERE는 그룹화 전에 조건을 걸고, HAVING은 그룹화 후 결과에 조건을 거는 차이가 있습니다.)
-- 평균 점수가 85 이상인 전공만 조회
SELECT major, AVG(score) AS 평균점수
FROM student s
JOIN grade g ON s.student_id = g.student_id
GROUP BY major
HAVING AVG(score) >= 85;
→ HAVING을 사용하면 집계 결과를 다시 필터링하여 분석 목적에 맞는 데이터만 추출할 수 있습니다.
※ 윈도우 함수 – 고급 집계
윈도우 함수(Window Function)는 그룹을 나누지 않고도 집계 결과를 행 단위로 계산합니다.
랭킹, 누적합, 이동평균 등의 고급 분석에 자주 활용됩니다.
-- 점수순 랭킹
SELECT name, score,
RANK() OVER (ORDER BY score DESC) AS 순위
FROM grade;
-- 과목별 최고 점수와 비교
SELECT subject, name, score,
MAX(score) OVER (PARTITION BY subject) AS 과목별_최고점수
FROM grade;
→ 윈도우 함수는 데이터 분석, 추천 시스템, 리더보드 등에 필수적으로 활용됩니다.
'2025 현대오토에버 모빌리티 SW 스쿨(클라우드 2기) > 데이터베이스' 카테고리의 다른 글
| [Database] DDL과 제약 조건 (0) | 2025.10.07 |
|---|---|
| [Database] SQL 언어 완벽 정리 (3) – SubQuery와 Join (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (1) – 개요 및 SELECT 기본 (0) | 2025.10.07 |
| [Database] 관계형 데이터베이스(RDBMS) 이해 (0) | 2025.10.07 |
| [Database] 데이터베이스의 개념과 역할 (0) | 2025.10.07 |