SELECT 필드이름1, 필드이름2,...
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1, 필드이름2
ORDER BY 필드이름[ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능
LIMIT N; N행만큼만 가져옴
SELECT
%%sql
SELECT *
FROM raw_data.user_session_channel;
- raw_data 데이터베이스안에 user_session_channel을 다 가져옴
%%sql
SELECT userId, sessionId, channel
FROM raw_data.user_session_channel;
- user_session_channel 테이블에서 SELECT 뒤 컬럼 이름들만 뽑아서 가져옴
LIMIT
%%sql
SELECT *
FROM raw_data.user_session_channel
LIMIT 10;
- user_session_channel 테이블 전체를 가져오되 10개까지만 가져오도록 함
DISTINCT
%%sql
SELECT DISTINCT channel -- 유일한 채널 이름을 알고 싶은 경우
FROM raw_data.user_session_channel;
- user_session_channel 테이블에서 channel 컬럼을 가져오는데 DISTINCT 때문에 중복이 모두 제거되고 고유값만 나옴
COUNT
%%sql
SELECT channel, COUNT(1) --채널별 카운트를 하고 싶은 경우. COUNT 함수!!
FROM raw_data.user_session_channel
GROUP BY 1;
- SELECT로 골라진 컬럼중 GROUP BY 의 숫자번째 컬럼을 기준으로 channel의 숫자들의 합을 구함
%%sql
SELECT COUNT(1) -- 테이블의 모든 레코드 수 카운트. COUNT(*). 하나의 레코드
FROM raw_data.user_session_channel;
- user_session_channel 테이블의 모든 레코드(행) 수 카운트
%%sql
SELECT COUNT(1)
FROM raw_data.user_session_channel
WHERE channel = 'Facebook';
- user_session_channel 테이블에서 channel이 "Facebook" 인 행의 숫자를 구함
- SELECT COUNT(1) FROM count_test → 7
- SELECT COUNT(0) FROM count_test → 7
- SELECT COUNT(NULL) FROM count_test → 0 NULL값이라 기준이 없어서 스킵해, 카운트가 안됨
- SELECT COUNT(value) FROM count_test → 6 널값 아닌것만 카운트
- SELECT COUNT(DISTINCT value) FROM count_test → 4 널을 제외한 유니크한값 갯수만 파악
CASE WHEN
%%sql
SELECT
channel,
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
LIMIT 100;
- user_session_channel테이블의 channel컬럼을 가져오는데
- CASE를 사용해서 WHEN 채널 데이터가 페이스북, 인스타 그램이면 'Social-Media'
- 구글, 네이버면 'Search-Engine'으로
- 그 외에는 'Something-Else'로
- END 뒤에 있는 이름의 컬럼에 표시가 되도록 함
- 리미트로 100개까지
NULL
- 값이 존재하지 않음을 나타내는 상수. 0 혹은 "" 과는 다름
- 필드 지정시 값이 없는 경우 NULL로 지정 가능
- 테이블 정의시 디폴트 값으로도 지정 가능
- 어떤 필드의 값이 NULL인지 아닌지 비교는 특수한 문법을 필요로 함
WHERE
IN
%%sql
SELECT COUNT(1)
FROM raw_data.user_session_channel
WHERE channel in ('Google','Facebook');
- user_session_channel 테이블에서 채널 컬럼중에 구글과 페이스북이 있는 레코드만 가져오고
- 전체개수를 컬럼으로 만듦
ILIKE
%%sql
SELECT DISTINCT channel
FROM raw_data.user_session_channel
WHERE channel ILIKE '%o%';
- channel에서 o를 중간 값을 가지고 있는 채널만을 조건으로
- 유니크한 값만 컬럼에 가져와줌
- o% -> o로 시작하는, %o% -> 중간에 o가 들어가는, %o->끝이 o인 조건으로 가져옴
- LIKE는 대소문자 구분, ILIKE 대소문자 구분 암함
STRING Functions
%%sql
SELECT
LEN(channel),
UPPER(channel),
LOWER(channel),
LEFT(channel, 4)
FROM raw_data.user_session_channel
LIMIT 100;
- LEN -> 문자열 길이
- UPPER -> 문자열을 모두 대문자로
- LOWER -> 문자열을 모두 소문자로
- LEFT -> 왼쪽부터 몇글자만 남김
ORDER BY
ORDER BY 1 ASC
ORDER BY 1 DESC
- ASC는 오른차순
- DESC는 내림차순
- NULL 값들은 ASC 에서 마지막에 위치
- NULL 값들은 DESC 에서 처음에 위치함
타입 변환
%%sql
SELECT
GETDATE(),
CONVERT_TIMEZONE('America/Los_Angeles', GETDATE());
- GETDATE로 현재 시간을 가져오고 컨버트 타임존을 사용해서 첫번째 인자 시간으로 두번째 인자 시간을 바꿈
- 이거말고 다른 여러가지 툴이 있음
Type Casting
%%sql
SELECT 1/2, 1/2::float;
- ::를 사용해서 float를 속성을 정의함
- 컬럼 속성을 설정할 수 있음
판다스 변형
result = %sql SELECT * FROM raw_data.user_session_channel
df = result.DataFrame()
- DataFrame()을 통해 판다스 포맷으로 변경 가능함