sql 11

Analytic SQL 5. 이동 평균(Moving Average)과 유의 사항

다른 집계 함수와 데이터 처리 관련 개념을 따로 빼놓기는 했다. 이는 window절의 심화 과정보다는 응용에 가까운 개념이라 판단되어 새로운 장으로 설명해보도록 한다. 이동 평균(Moving Average)이란? 평균을 구하는 범위 구간을 이동시키면서 구하는 평균값을 의미함. 지금껏 자주 사용되는 누적합과 더불어 누적 평균도 존재는 하다만, 누적평균보다는 이동 평균이 더 보편적으로 쓰이는 편. 여기서의 범위 구간 = 이미 배웠던 window의 정의와 연결시켜 생각한다면 쉽게 이해할 수 있을 것 같다. 이를 구하는 이유는 뭘까? 주식과 같은 항목처럼 단기간 변동성이 심한 항목들에 대해서 이동 평균을 접목시키면 효과적인 시각화가 가능하다. 전반적인 추세를 확인하기 어려운 항목에 대해 효과적인 집계/시각화가 ..

Analytic SQL 4. Window 절 심화

window 절이 다른 절과 다르게 알아야 하는 것이 조금 있기 때문에 추가적인 장을 만들어 공부해보도록 한다. Analytic SQL의 기본 구문을 다시 한번 상기하고 시작해보도록 하자. (인자) over( -- partition 절 -- sorting 절 -- window 절 ) 상기 코드에서 window 절에 해당하는 구문을 더 자세히 뜯어보면 다음과 같다고 할 수 있다. --window 절의 사용 {rows | range} {between {unbounded preceding | current row | value_expr {preceding | following} } and {{unbounded preceding | current row | value_expr {preceding | follow..

Analytic SQL 3. 집계(Aggregate) SQL

일반적인 순위 함수 사용방법과 더불어 집계 함수를 사용하는 방법에 대해서도 소개하는 시간을 가진다. 집계 함수란? 전부터 계속 말하고 있지만, 특정 컬럼의 재가공과 아주 밀접한 관련이 있는 집계 함수. 그 종류에는 sum(), max(), min(), avg(), count() 등이 있으며, 해당 집계 함수를 window를 이용하여 행 레벨로 자유자재로 집계할 수 있는 기능을 Analytic SQL에서는 제공하고 있다. 아래의 쿼리 예시는 개요에서도 보여준 바가 있는 Analytic SQL의 사용 방법을 보여준다. (인자) over( -- partition 절 -- sorting 절 -- window 절 ) 여기에서 over 구문의 마지막으로 나오는 window의 첫 번째 사용 방법으로 집계 함수를 설명..

SQL 기본 6. 서브 쿼리(Subquery, Where 절)

당초에 해당 내용은 나중에 공부할 계획이었지만 SQL 구문의 여러 예시와 실습을 진행하면서 서브 쿼리가 간간히 사용되는 것을 알 수 있었다. 본인이 희망하는 분야인 데이터 분석(Analytic SQL) 파트에서는 그렇게 부각되는 내용은 아니다만, 다른 코드나 논리적인 쿼리문을 작성하고자 할 때 충분한 윤활유 역할을 해줄 수 있을 것 같아 추가적으로 서브 쿼리에 대한 공부를 시작하게 되었다. 서브 쿼리를 사용한다면 대용량 데이터를 처리하는 입장에서 성능이 저하될 우려가 있음. 이는 서브 쿼리 자체의 문제인 코드가 길어진다는 점과 결부된다. 서브 쿼리가 정확히 뭘까? 서브 쿼리는 하나의 쿼리 내에 또 다른 쿼리가 포함되는 쿼리를 의미한다. 서브 쿼리는 기본적으로 메인 쿼리(Main Query) 내에 포함되어..

Analytic SQL 2. 순위(Rank) 함수

Analytic 함수에서 순위로 작동되는 함수에 대해서 알아보자. 일반적인 함수와 더불어 어떠한 방식으로 사용되는지도 아래의 표를 통해 간단히 살펴본다. 설명 종류 일반적인 순위 rank, dense_rank, row_number 0~1 사이의 정규화 순위 cume_dist(누적 분포), percent_dist 분위 ntile 등 제공하는 여러 함수가 있지만 가장 보편적으로 사용되는 일반적인 순위(rank, dense_rank, row_number)에 대해서 먼저 살펴보도록 하자. 세 가지의 일반적인 순위 함수의 로직은 기본적으로 동일하게 작동하나 공동 순위를 정함에 있어서 다른 차이를 보인다는 특징이 있음 rank 우리가 생각하는 일반적인 등수를 반환. 이때, 공동 순위가 존재할 경우 다음 순위는 공동..

Analytic SQL 1. 개요

그래서 이게 뭔데? SQL을 이용한 분석. 예전부터 존재는 했으나(OLAP 등) Analytic SQL이 나오면서 데이터 분석을 더욱 용이하게 함 RDBMS(Realtional DataBase Management System, 관계형 데이터베이스 시스템)에서 Analytic SQL을 제공한 이후 다시 데이터 분석의 중심에 설 수 있는 계기가 되었음 기존 집계 함수 : Group by를 사용할 때 원본 데이터 집합의 레벨을 변경하여 적용한다. 💡 Group by만을 이용해서 데이터 분석을 하기에는 너무 귀찮고 어렵고 레벨 변경에 한계가 있어! Analytic SQL : 원본 데이터 집합의 레벨을 그대로 유지하면서 적용한다는 차이를 가짐. 💡 Window function(=Analytic Function)을..

SQL 기본 5. Group by 응용(가공 컬럼, case when/rollup/cube)

4장에서 group by에 대하여 다음과 같은 설명을 한 바 있다. Select 절에는 group by 절에 기술된 컬럼의 이름(또는 가공된 컬럼)과 집계 함수만 사용되어야 한다. 그 외의 것들이 있을 경우에는 오류를 발생 4장에서 간단하게 짚고만 넘어갔지, 실제 이 '가공된 컬럼'이란 무엇인지에 대해서는 해당 장에서 상세히 짚고 넘어가고자 한다. 가공된 컬럼을 이용한 group by절 응용 앞서 소개한 바와 같이 group by 절에는 기술된 컬럼 외에도 다음과 같은 가공 컬럼이 올 수 있다. select *, to_char(a_date, 'yyyy') as a_year from a_table group by to_char(a_date, 'yyyy'); -- a_date 컬럼의 년도값을 기준으로 그룹핑..

SQL 기본 4. 그룹/집계 함수의 이해

데이터 분석을 함에 있어서 데이터를 묶는 Join과 더불어 양대산맥 위치쯤에 있는 Group by, Aggregation 함수라 카더라. 일단 group by가 뭐 하는 함수인지 대충 살펴보고 넘어가자. Group by는 뭐하는 거야? group by는 특정 컬럼의 똑같은 값을 기준으로 그룹핑을 해주는 키워드 group by 키워드 다음으로 적힌 컬럼 값으로 그룹화를 하면 다른 집계 함수(Aggregation function)와 함께 사용할 수 있음 이는 다시 말해? Select 절에는 group by 절에 기술된 컬럼의 이름(또는 가공된 컬럼)과 집계 함수만 사용되어야 한다. 그 외의 것들이 있을 경우에는 오류를 발생 여기서 가지는 그룹핑의 또 한 가지 특징! 💡특정 컬럼을 이용하여 그룹핑을 진행할 경..

SQL 기본 3. 시간 정보와 추출(Date, Timestamp, Time, Interval)

SQL에서는 크게 네 가지의 시간과 관련한 타입이 존재한다. (정확히는 현재 필자가 공부하고 있는 PostgreSQL을 기준으로) 1. Date : '일자'의 의미로 년,월,일의 정보만 가진다. 타입은 'YYYY-MM-DD'의 방식 문자열을 Date 형식으로 반환해주는 to_date to_date('2022-12-20','yyyy-mm-dd') 상기 '2022-12-20'는 문자열 정보이다. 날짜에 대한 정보는 하나도 가지고 있기 않기에 이를 to_date 함수를 이용하여 Date 타입으로 반환시켜주어야 올바른 사용이 가능하다. 반대로 Date 타입을 문자열로 변환하고 싶을 때는 to_char 함수를 사용한다. to_char(saldate, 'yyyy-mm-dd') -- saldate의 타입은 Date인..

SQL 기본 2. Outer/Non Euqi Join

Inner Join은 뭔데? 첫 번째 장에서 다루었던 Join에 대한 내용이 Inner Join에 대한 내용이었다. 테이블 A와 B의 Join 방향은 어느 방향으로 가든 그 결과는 같다는 이야기 또한 했던 것으로 기억 이야기를 하기에 앞서서 Inner/Outer의 근본 개념 💡 A → B로 Join 되는 Table이라 할 때, A가 B 속으로 들어간다 하여 A를 Outer, B를 Inner라 칭한다. 여기서 Inner가 의미하는 것은 내부. 즉, A와 B가 모두 속하는 키값이 존재하는 경우에만 M 집합의 테이블을 구성하여 반환하는 것을 의미한다(1:M Join 기준). 상기 테이블은 키값이 되는 customer_id와 customer의 컬럼을 이용하여 Join을 시킨 결과이다. 결과에서도 보다시피 각각의..