Database/Mysql
[MySQL][SQL] 2-3. DML: Inner Function (Multi Row)
noahkim_
2026. 3. 5. 15:01
1. Aggregation
- 여러 행의 데이터를 하나로 요약하여 집계값을 반환하는 연산
Group By
- 특정 컬럼 기준으로 행을 그룹화
- ✅ Null 값도 하나의 그룹으로 포함됨
- ✅ True/False 값은 1/0으로 처리됨
Having
- 그룹의 결과를 필터링함
- ✅ Group By 이후 집계 결과에서 포함될지 결정됨
2. Column Functions
기본 집계 함수
| 함수 | 설명 | 예시 |
| COUNT() | 행 개수 | COUNT(*) |
| SUM() | 합계 | SUM(price) |
| AVG() | 평균 | AVG(score) |
| MAX() | 최대값 | MAX(salary) |
| MIN() | 최소값 | MIN(age) |
비트 집계 함수
| 함수 | 설명 |
| BIT_AND() | 비트 AND 집계 |
| BIT_OR() | 비트 OR 집계 |
| BIT_XOR() | 비트 XOR 집계 |
문자열 집계 함수
| 함수 | 설명 |
| GROUP_CONCAT() |
문자열을 하나로 결합
|
통계 집계 함수
| 함수 | 설명 |
| STD() | 표준편차 |
| STDDEV() | 표준편차 |
| STDDEV_POP() | 모집단 표준편차 |
| STDDEV_SAMP() | 표본 표준편차 |
| VARIANCE() | 분산 |
| VAR_POP() | 모집단 분산 |
| VAR_SAMP() | 표본 분산 |
JSON 집계 함수
| 함수 | 설명 |
| JSON_ARRAYAGG() | JSON 배열 생성 |
| JSON_OBJECTAGG() | JSON 객체 생성 |
3. Window Functions
- 행을 유지하면서 각 행에 대해 계산을 수행하는 함수
- ✅ Group By 사용 안함
구조
함수() OVER (
PARTITION BY <column>
ORDER BY <column>
ROWS BETWEEN <start> AND <end>
)
- OVER(): 윈도우 정의
- Partition By: 그룹 나누기
- Order By: 순서 기준
- Rows Between: 어느 범위까지 집계할 지 결정
표) Rows Between - start/end
더보기
| 키워드 | 의미 |
| UNBOUNDED PRECEDING |
파티션의 맨 처음 행
|
| n PRECEDING |
현재 행 기준 n행 앞
|
| CURRENT ROW | 현재 행 |
| n FOLLOWING |
현재 행 기준 n행 뒤
|
| UNBOUNDED FOLLOWING |
파티션의 맨 마지막 행
|
순위 함수
| 함수 | 설명 |
| ROW_NUMBER() | 순번 |
| RANK() | 순위 (동점 건너뜀) |
| DENSE_RANK() | 순위 (동점 유지) |
| NTILE(n) | n개 그룹으로 분할 |
코드) RANK()
더보기
SELECT name,
salary,
RANK() OVER (ORDER BY salary DESC)
FROM employees;
집계 윈도우 함수
| 함수 | 설명 |
| SUM() | 누적 합 |
| AVG() | 평균 |
| COUNT() | 개수 |
| MAX() | 최대 |
| MIN() | 최소 |
코드) SUM()
더보기
SELECT date,
sales,
SUM(sales) OVER (ORDER BY date)
FROM orders;
누적합
SELECT date,
sales,
SUM(sales) OVER (
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
FROM orders;
코드) AVG()
더보기
이동 평균 (최근 N개)
SELECT date,
sales,
AVG(sales) OVER (
ORDER BY date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)
FROM orders;
위치 윈도우 함수
| 함수 | 설명 |
| LAG() | 이전 행 값 |
| LEAD() | 다음 행 값 |
코드) LAG()
더보기
SELECT salary,
LAG(salary) OVER (ORDER BY salary)
FROM employees;