하루 종일 프로젝트로 정신 없었고, SQL 챌린지반 첫 세션을 들었다. 몰랐던 함수를 알게 돼서 막혔던 코테를 풀 수 있을 것 같다.
학습 내용
Window Function(SQL)
- GROUP BY 로 그룹핑한 효과를 내주지만, 모든 행을 출력하고 싶을 때 사용한다!
- GROUP BY 구문과 병행하여 사용이 불가능하고, 다른 함수와 다르게 중첩 사용이 불가능하다.
- 기본 문법
SQL SELECT WINDOW FUNCTION () OVER (PARTITION BY ORDER BY)
- 함수 종류
- 순위
ROW_NUMBER()
: 중복 순위를 매기지 않고, 어떻게든 데이터 간에 순위를 매겨주는 함수RANK()
: 중복 순위를 매김. 공동 n등이 존재하고, 그 다음 순위는 공동 순위 인원 수만큼 밀린다.
즉, 공동 1등 2명이면 그 다음 순위는 3등DENSE_RANK()
: 중복 순위를 매김. 공동 n등이 존재하지만, 순위는 연속적으로 매긴다.
- 순서
FIRST_VALUE()
: 파티션 별로 가장 먼저 나온 값을 출력한다. 중복순위를 매기지 않는다.LAST_VALUE()
: 파티션 별로 가장 나중에 나온 값을 출력한다. 중복 순위를 매기지 않는다.LAG()
: 현재 행을 기준으로 n 번째 앞에 있는 행의 값을 "지연시킨다."
값이 n칸씩 아래로 밀리는 셈이므로 head 쪽에 NULL 이 생김. n 값은 Default 1, 최대 3LEAD()
: 현재 행을 기준으로 n 번째 뒤에 있는 행의 값을 "끌어온다."
값이 n칸씩 위로 당겨지는 셈이므로 tail 쪽에 NULL 이 생김. n 값은 Default 1, 최대 3
- 비율
CUME_DIST()
: 파티션 별로 전체 건수에서 현재 행보다 작거나 같은 건수에 대해 누적 백분율 출력
- 순위
쿼리 스타일 가이드(SQL)
- 강의에서 커버한 부분도 있고, 내가 따로 검색해서 찾아본 내용도 있다.
- Mozilla의 쿼리 스타일 가이드를 주로 참고한다고 SQL Style Guide
- SQL 쿼리 작성 가이드
- 예약어는 대문자로 작성한다.(ex. SELECT, FROM)
- 컬럼명은 snake_case로 작성.
cf. CamelCase로 쓰는 회사/단체라면 정해진 규칙에 맞춰 쓴다. - 컬럼명 또는 테이블명을 명명할 때는 명시적인 이름을 사용한다.
- 쿼리문은 왼쪽 정렬로 작성할 것
- 예약어나 컬럼은 한 줄에 하나씩 작성하는 것을 권장 : 디버깅 할 때 용이함.
- 별칭을 명명할 때는 ‘AS’ 를 사용하여 알아보기 쉽게 한다.
Join
타입을 명시한다.ON
으로 조인 조건을 작성할 때는JOIN
다음 줄에 들여쓰기 후 작성.- 서브쿼리를 남발하는 것 보단 CTE(Common Table Expression)를 적극 활용하자
'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글
[TIL] camp_day27_240523 (0) | 2024.05.24 |
---|---|
[TIL] camp_day26_240522 (0) | 2024.05.24 |
[TIL] camp_day24_240520 (0) | 2024.05.20 |
[TIL] camp_day23_240517 (0) | 2024.05.17 |
[TIL] camp_day22_240516 (0) | 2024.05.16 |