데이터분석 40

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을 시킨 결과이다. 결과에서도 보다시피 각각의..

SQL 기본 1. Join 메커니즘(Inner)

Join은 관계형 데이터베이스에서 가장 기본이자 중요한 기능 두 개 이상의 테이블을 서로 연결하여 데이터를 추출하는 과정을 의미한다. 관계형 데이터베이스에서는 Join을 통해 서로 다른 테이블간 정보를 원하는 만큼 가져올 수 있는 장점이 있다. 어떻게든 연결만 된다면 = 공통 Key값이 존재한다면 이 둘을 합쳐 새로운 테이블을 만들 수 있다는 것은 가장 큰 강점임 여기서 가져갈 수 있는 특징 한 가지! 💡 Join 하려는 각 테이블의 위치관계는 동등하다. 이는 두 테이블의 크기에 차이가 있다 하더라도 상호간의 정보를 교환할 수 있는 특징을 가진다고도 할 수 있다. 💡 여기서 유일하지 않은 테이블 A와 각 키값이 유일한(unique) 테이블 B가 있을 때 이 둘의 Join 결과 집합은 A 집합의 레벨을 그..