티스토리 뷰
1. 윈도우함수() + OVER()
- 순위, 집계 등 행과 행사이의 관계를 정의하는 함수, OVER 구문을 필수로 한다
- 순위함수(RANK, DENSE_RANK/ROW_NUMBER) + 집계함수(AVG/SUM/MAX/MIN)로 구성
- 언제쓸까? 특정 테이블의 특정 행만 선택해서 볼때
* 특정 테이블의 특정 컬럼만 볼땐 JOIN
SELECT WINDOW_FUNCTION(ARGUMENTS)
OVER ([PARTITION BY 칼럼] [ORDER BY절] [WINDOWING 절]) FROM 테이블명;
-- MySQL 8.0.22 이상
-- MariaDB 10.2.0 이상
- ARGUMENTS: 윈도우 함수에 따라서 필요한 인수
- PARTITION BY: 전체 집합에 대해 소그룹으로 나누는 기준
- ORDER BY: 소그룹에 대한 정렬 기준
- WINDOWING: 행에 대한 범위 기준
| WINDOWING | 설명 |
| ROWS | 물리적 단위로 행의 집합을 지정 (그룹 범위 재지정) |
| UNBOUNDED PRECEDING | 윈도우의 시작 위치가 첫 번째 행 |
| UNBOUNDED FOLLOWING | 윈도우의 마지막 위치가 마지막 행 |
| CURRENT ROW | 윈도우의 시작 위치가 현재 행 |
1) 순위함수 RANK(공란) OVER ([PARTITION BY 칼럼] [ORDER BY절] [WINDOWING 절])
- RANK(): 동일한 값에 동일한 순위, 다음 순위는 건너뜀
- DENSE_RANK(): 동일한 값에 동일한 순위, 건너뛰지 않고 연속적인 순위
- ROW_NEMBER(): 동일한 값에도 고유한 순위
2) 일반집계함수
- GROUP BY없이 SUM, MAX, MIN과 같은 집계함수를 사용할 수 있다
3) 그룹 내 행 순서 함수
- FIRST_VALUE(컬럼명): 가장 먼저 나온 값을 구한다
- LAST_VALUE(컬럼명): 가장 나중에 나온 값을 구한다
- LAG(컬럼명, X): 이전 X번째 행을 가져온다
- LEAD(컬럼명, X) : 이후 X번째 행을 가져온다
4) 그룹 내 비율 함수
- RATIO_TO_REPORT: 파티션 내 전체 SUM에 대한 비율(MariaDB에서는 제공되지 않아 명시적으로 구현)
- PERCENT_RANK(): 파티션 내 순위를 백분율로 구한다(제일 높은 순위 행은 0, 가장 낮은 순위 행은 1)
- CUME_DIST(): 파티션 내 현재 행보다 작거나 같은 건들의 수 누적 백분율로 구한다()
- NTILE(): 파티션 내 행들을 N등분한 결과를 구한다
2. 그룹함수
1) GROUP BY A,B WITH ROLL UP: GROUP BY의 소계 및 총계를 보여줌(MariaDB 기준)
* ORACLE, Postrgre 기준: GROUP BY ROLL UP(A,B)
2) GROUP BY N개 UNION: 가능한 ROLL UP들의 합(ROLL UP(A,B)+ROLL UP(B,A))
*ORACLE, Postrgre 기준: CUBE(A,B)
3) GROUPING SETS: 각 컬럼에 대해 GROUP BY로 생성한 통계를 모두 UNION ALL 한 결과와 동일
'AI > SQL' 카테고리의 다른 글
| [SQL] JOIN과 서브쿼리 (0) | 2025.04.18 |
|---|---|
| [SQL] 데이터베이스 비교 (0) | 2025.04.18 |
| [SQL] 관계형대수, 계층형 질의, 재귀 (0) | 2025.04.17 |
| [SQL] SQL과 NoSQL (0) | 2025.04.17 |
| [SQL] 인덱스와 뷰, JOIN (0) | 2025.04.17 |
- Total
- Today
- Yesterday
- ChatGPT
- llm
- 습관
- 갓생
- 프로그래머스
- opic
- IH
- 고득점 Kit
- 스크랩
- 경제
- Python
- Ai
- 아침운동
- 영어회화
- 미라클모닝
- 뉴스
- 실기
- 기초
- C언어
- 아침
- 루틴
- 오블완
- 30분
- 운동
- 줄넘기
- 빅데이터 분석기사
- 티스토리챌린지
- 다이어트
- 오픽
- SQL
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |