[SQL] 윈도우 함수 범위 지정을 이용하여 퍼널 분석 로직 짜보기 - feat.window frame
딥상어동의 딥한 SQL/LV2.중급쿼리2022. 6. 17. 01:18[SQL] 윈도우 함수 범위 지정을 이용하여 퍼널 분석 로직 짜보기 - feat.window frame

핵심 내용 SQL 윈도우 함수가 가진 여러 특성들을 이해해보고 간단한 퍼널 분석 로직을 짜봅시다. 1. partition by 2. order by 3. window frame 범위 체계 4. 간단한 퍼널 분석 로직 윈도우 함수를 사용하는 이유 윈도우 함수를 이해하기 위해서는 GroupBy와 비교해보는 것이 좋습니다. 우선, Group By에 대해서 생각해봅시다. Group By를 하면 행 수가 줄어듭니다. 그룹의 수만큼요. 하지만, 윈도우 함수는 그렇지 않습니다. 그룹의 수가 그대로 보존되는데요. 이 지점이 윈도우 함수와 Group By의 가장 큰 차이라고 할 수 있습니다. 공통점은 둘다 집계 함수를 사용할 수 있다는 점입니다. 그렇다면, 윈도우 함수는 언제 사용해야 할까? 당연히 원래 행을 보존해야 ..

[MSSQL] 이전 값으로 NULL 값 대체하기
딥상어동의 딥한 SQL/LV2.중급쿼리2021. 8. 31. 11:09[MSSQL] 이전 값으로 NULL 값 대체하기

0. 문제 SQL을 하다보면 문득 이런 고민에 빠질때가 있습니다. 저기 NULL값을 이전 값으로 대체하고 싶은데... 어떻게 하지? 왜냐하면, SQL에는 Pandas fillna 함수의 ffill과 같은 메서드가 없기 때문인데요. https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html pandas.DataFrame.fillna — pandas 1.3.2 documentation If method is specified, this is the maximum number of consecutive NaN values to forward/backward fill. In other words, if there is a gap with ..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 27. 18:01[SQL] CASE WHEN이 가진 의의

http://www.yes24.com/Product/Goods/24089836?OzSrank=1 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 참조하여 작성했습니다. 0. 약방의 감초 CASE는 식이기 때문에 식을 적을 수 있는 곳 어디에서나 활용 가능하다. SELECT, WHERE, GROUP BY, HAVING, ORDER BY 1. 구문에서 식으로의 사고 전환 /* query_a */ SELECT 지역, 판매_a FROM t1 where 지역 = "부산" union all SELECT ..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 27. 17:39[SQL] Group By VS Window 함수

http://www.yes24.com/Product/Goods/24089836?OzSrank=1 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 참조하여 작성했습니다. 01. Group By 의 작동 원리 /* 지역 판매량 부산 3 부산 2 인천 5 인천 3 서울 7 서울 9 */ SELECT 지역, SUM(판매량) as 판매량 FROM [판매] GROUP BY 지역 /* 지역 판매량 부산 5 인천 8 서울 16 */ 위 예시를 살펴보자. 쿼리에 따른 입력 / 출력 결과물의 "가장 큰 차이"는..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 27. 17:21[SQL] SubQuery가 가진 의의

http://www.yes24.com/Product/Goods/24089836?OzSrank=1 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 참조하여 작성하였습니다. SELECT * FROM t1 WHERE exists (select a from t2 where t1.a = t2.a) 위와 같이 exists 안에 () 묶여있는 구문을 subquery 라고 한다. subqeury 역시 2차원 표 구조의 자료형태이다. subquery의 장점은 "동적인 속성"을 가질 수 있다는 건데 왜 동적이냐..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 27. 17:13[SQL] 언어가 가진 철학

http://www.yes24.com/Product/Goods/24089836?OzSrank=1 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 참조하여 작성했습니다. 01. DBMS라는 이름의 하인 Select * From t1 데이터를 "어떻게 선택해야 할지" 절차적인 부분에 대한 언급은 하나도 없다. 단지, "어떤" 데이터를 선택할지가 중요할뿐 절차적인 부분은 DBMS가 맡는다. 02. SQL에 반복문이 없는 이유 - Edgar F. Codd 관계 조작은 관계 전체를 모두 조작의 대상으로..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 27. 17:00[SQL] Nested Loop Join

SELECT t1.* FROM t1 INNER JOIN t2 on t1.a = t2.a 예를 들어 위와 같은 조인 구문이 있다고 가정하자. "이중 for loop"를 생각하면 Nested Loop Join을 이해하기 쉽다. 예를 들어, t1의 a항목에 1이라는 값이 있다고 가정하자. 그러면, 그 다음 t2의 a항목에 존재하는 모든 값들에 대해 1이 존재하는지 찾으면서 결합을 진행하는 것이다. 흔히, 아는 다음의 이중 루프 알고리즘을 생각하면 된다. for a in t1 : for b in t2 : if a == b : blar blar blar 그래서, 스캔할 테이블의 크기에 속도가 많이 좌우되고, 이에 따라 join key에 어떤 index가 포함되는지가 중요하다고 할 수 있다. index 스캔을 하면..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 26. 14:15SQL 구문이 데이터 저장소에 이르기 까지

http://www.yes24.com/Product/Goods/24089836 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 보고 작성하였습니다. 0. 파서(parser) SQL 구문을 분석하는 것이다. 예를 들어, 아래와 같이 select에 아무런 컬럼을 선택하지 않은 경우 파서 단계에서 탈락하게 된다. SELECT FROM t1 1. 옵티마이저(optimizer) 인덱스, 데이터 편햔 정도 등 다양한 요소를 고려하여 "수많은 실행계획" 중 가장 낮은 비용을 가진 실행 계획을 선택한다. 사..

딥상어동의 딥한 SQL/LV2.중급쿼리2021. 6. 26. 14:02왜 버퍼를 사용하는가?

http://www.yes24.com/Product/Goods/24089836 SQL 레벨업 - YES24 실무에 필요한 SQL 최적화!〈SQL 첫걸음〉으로 성공적인 입문을 마치고, 다음 고지를 바라보는 이들을 위한 한 권!이 책은 고성능 SQL 작성 방법을 초보자 눈높이에 맞춰 다양한 예제를 통해 설명 www.yes24.com 본 도서를 참고하여 작성하였습니다. 01. 데이터 저장 비용과 접근 속도의 트레이드 오프 테이프와 메모리를 비교해보자. 테이프는 녹음(=데이터 저장) 하기는 쉽지만, 테이프에 저장되어 있는 곡을 재생시키는 데에는 꽤 시간이 걸린다. 반면, 메모리의 경우 메모리에 올려둔 데이터는 바로 사용할 수 있다. 하지만, 메모리는 비싸다. 이처럼 데이터 저장 비용과 접근 속도 간에는 트레이드..

[MSSQL] while (1) 기본 사용법 - declare, set, while, begin, end, print
딥상어동의 딥한 SQL/LV2.중급쿼리2021. 3. 29. 03:14[MSSQL] while (1) 기본 사용법 - declare, set, while, begin, end, print

MSSQL 에는 파이썬/R에서 사용되는 for 문법 대신 while 문법을 사용합니다. 오늘은 while 문법을 응용하기전에 기본적인 사용법에 대해서 다루어 보려고 합니다. 목차 1. 구성 요소 2. 예제1 - 숫자 업데이트 3. 예제2 - 숫자와 문자를 결합하여 업데이트 4. 예제3 - 날짜 변수 업데이트 4-1. select 구문을 이용한 변수 할당 1. 구성 요소 while문을 사용하기 위해서는 다음과 같은 재료들이 필요합니다. declare : 변수 선언 set : 선언한 변수에 값 할당 while : 종료 조건 지정 begin : 실행 구문 입력 print : 결과 출력 end : 실행 구문 종료 2. 예제1 - 숫자 업데이트 declare @i as int; set @i = 1; while @i

image