[4/23] TIL - SQL을 이용한 데이터 분석[2]

Sangwon Jwa·2024년 4월 23일

데브코스 TIL

목록 보기
18/54
post-thumbnail

📖 학습 주제


  1. 실습 DB 설명
  2. SQL 기본

✏️ 주요 메모 사항 소개


실습 데이터 설명

 

AWS Redshift를 이용한 데이터 웨어하우스 실습을 진행하기 앞서 실습에서 사용할 관계형 DB의 테이블에 대해 설명하려고 한다.
먼저 우리가 사용할 DB에는 웹서비스 사용자/세션 정보를 포함한다.

  • 사용자ID : 웹서비스에서 등록된 사용자마다 부여하는 유일한 ID
  • 세션ID : 세션마다 부여되는 ID로 사용자의 방문을 논리적인 단위로 나눈 것. 하나의 사용자는 여러 개의 세션을 가질 수 있고 보통 세션을 만들어낸 접점(경유지)를 채널이란 이름으로 기록해둔다. (마케팅 관련 기여도 분석을 위해)

우리가 사용할 raw_data 데이터베이스(스키마)의 테이블 구성은 다음과 같다.

실제 레코드의 예시를 보면 다음과 같은 형식으로 channel 에는 어떠한 경유지를 거쳐왔는지를 표시한다.

이 정보를 기반으로 다양한 데이터 분석과 지표 설정이 가능하다. 예를들어

  1. 마케팅 관련, 사용자 트래픽 관련
  2. DAU, WAU, MAU등의 일주월별 Active User 차트
  3. Marketing Channel Attribution 분석 (어느 채널에 광고를 하는 것이 가장 효과적인가?)

SQL 기본

 

SQL을 이용한 실습을 진행하기 전 SQL의 기본적인 규칙을 알아보자.

  1. 다수의 SQL 문을 실행한다면 세미콜론으로 분리가 필요하다.
  2. SQL 주석
  • -- : 인라인 한줄짜리 주석.
  • /* -- */ : 여러 줄에 걸쳐 사용 가능한 주석
  1. SQL 키워드는 대문자를 사용한다던지 하는 나름대로의 포맷팅이 필요하다.
  2. 테이블/필드 이름의 명명규칙을 정하는 것이 중요하다.
  • 단수형 vs 복수형 (EX. user vs Users)
  • _ vs CamelCasing (EX. user_session_channel vs UserSessionChannel)

 


DDL (Data Define Language)

테이블 구조를 정의하는 언어

1.CREATE TABLE : 테이블을 새로 정의하는 명령어, Primary key 속성을 지정할 수 있으나 무시된다.

  • CTAS : SELECT 문의 출력을 기반으로 새 테이블을 만드는 병렬 연산. 단일 명령을 사용하여 데이터를 만들고 테이블에 삽입하는 가장 간단하고 빠른 방법
CREATE TABLE table_name AS SELECT ...
  • 기본형
CREATE TABLE raw_cata.user_session_channel (
	userid int,
    sessionid varchar(32) primary key,
    channel varchar(32)
);

 
2.DROP TABLE : 테이블을 삭제 하는 명령어. 없는 테이블을 지우려고 하는 경우 에러를 내기 때문에 IF EXISTS를 붙여서 사용한다.

DROP TABLE IF EXISTS table_name;

 
3.ALTER TABLE : 테이블의 구조를 변경하는 명령어.

  • 컬럼 추가
ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
  • 컬럼 이름 변경
ALTER TABLE 테이블이름 RENAME 현재필드이름 TO 새로운필드이름;
  • 컬럼 제거
ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
  • 테이블 이름 변경
ALTER TABLE 현재테이블이름 RENAME TO 새로운테이블이름;

DML (Data Manipulation Language)

SELECT : 레코드 질의 언어, 조건을 설정하여 내가 원하는 레코드를 읽어올 수 있다.

SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름[DESC/ASC]          -- 필드이름 대신에 숫자 사용 가능
LIMIT N;

INSERT INTO : 레코드 추가
UPDATE FROM : 레코드 수정
DELETE FROM : 레코드 삭제

  • CASE WHEN : 필드 값의 변환을 위해 사용 가능한 명령어
CASE 
	WHEN 조건1 THEN1 
    WHEN 조건2 THEN2
    ELSE3 
END 필드이름
SELECT CASE
	WHEN channel in ('Facebook', 'Instagram') THEN 'Social-Media'
    WHEN channel in ('Google', 'Naver') THEN 'Search-Engine'
    ELSE 'Something-Else'
END channel_type
FROM raw_data.user_session_channel;

SQL 내장 함수

 

NULL이란?

값이 존재하지 않음을 나타내는 상수로 0 혹은 ""과는 다르다. 필드 지정 시 값이 없는 경우 NULL로 지정이 가능하다.
어떤 필드의 값이 NULL인지 아닌지 비교는 특수한 문법을 필요로 함 ex) field1 is NULL 혹은 field1 is not NULL

 

COUNT() 함수

SQL에서 COUNT() 함수의 인자는 NULL 값과 NULL이 아닌 값으로 구분된다. COUNT 함수의 제대로된 이해를 위해 다음과 같은 예시를 풀어보자.

💦 공부하며 어려웠던 내용


COUNT() 함수의 인자로 들어간 값과 출력값의 연관성을 이해하는데 조금 시간이 걸렸다.

0개의 댓글