데이터 엔지니어링 스타터 키트 2주차 강의 정리

·2021년 8월 14일
0

숙제하며 배운 것

PostgreSQL

MySQL에서 쓰던 SQL문과 대체로 같지만 다른 부분들도 있다.

주석처리

주석처리는 한 줄 주석의 경우 -- 를 쓴다.
-- 이전까지는 상관없고, --를 쓴 이후 그 뒤는 주석처리
SQL문에다가 주석처리를 해본 적이 없어서 몰랐다.
여러 줄 주석은 /* */로 처리한다.(SQL 공통)

"(큰따옴표double qoutes), '(작은따옴표single qoutes)

MySQL에서 WHERE문 쓸 때 검색하려는 값 string을 감싸는 용도로 늘 " 를 썼는데, 여기선 "는 컬럼명이나 테이블명같은 identifier에 쓴다.
(https://yahwang.github.io/posts/mysql-vs-postgres)

현재 실습환경(colab) 에서 직접 해보니

SELECT *
FROM raw_data.user
WHERE userid = "184"

이렇게 쓰면 문법에러syntax error가 뜨고, 184라는 이름을 가진 column이 존재하지 않는다고 한다.

SELECT *
FROM raw_data.user
WHERE userid = 184
또는
SELECT *
FROM raw_data.user
WHERE userid = '184'

와 같이 쓰면 잘 작동한다.

case-insensitive vs. case-sensitive

MySQL은 대소문자를 구분하지 않는다. 'Hello' = 'hello' 가 성립한다.
PostgreSQL은 대소문자를 구분한다. 'Hello' = 'hello' 가 성립하지 않는다.

DATE, COUNT

SELECT DATE(ts) date, COUNT(sessionID)

DATE를 위와 같이 씀으로써, ts라는 컬럼(field)에 있는 timestamp값에서 뒤에 시간부분을 빼고 yyyy-mm-dd 양식으로 날짜값만 불러와서 'date'라는 컬럼으로 보여줄 수 있다.

위 SELECT문의 COUNT를 통해서는 date별로 sessionID를 세어서 같은 date에 해당하는 sessionID가 몇개씩인지를 세어서 보여준다.

COUNT(1) COUNT(*) COUNT(NULL) COUNT(columnname)

https://ryean.tistory.com/10

GROUP BY, ORDER BY 에서 1, 2 표현

GROUP BY 1
ORDER BY 1
과 같은 SQL문을 보고 엥? 이라고 생각했는데,
이름과 상관없이 SELECT하는 첫번째 항목을 1, 두번째를 2와 같이 표현할 수 있었다!

DISTINCT

SELECT하는 컬럼명column 앞에 DISTINCT가 붙어있어서 뭔가 했더니, 이걸 붙이면 unique한 값만(중복제거) SELECT 해준다.

COUNT(DISTINCT userid)와 같이 쓸 수 있다.

WHERE문 like vs. ilike

like는 대소문자를 구분, ilike는 대소문자를 구분하지 않는다.
WHERE channel ilike '%o%'
와 같이 쓰면 channel 중 소문자 o나 대문자 O를 포함한 문자열을 모두 찾겠다는 뜻.

예약어(Key Words)? month

SELECT TO_CHAR(st.ts, 'YYYY-MM') month, COUNT(DISTINCT usc.userID) MAU
FROM raw_data.session_timestamp st
JOIN raw_data.user_session_channel usc ON st.sessionID = usc.sessionID
GROUP BY 1
ORDER BY 1
LIMIT 10;

예시를 조금 바꿔서 위처럼 썼는데 계속 syntax error가 떠서 무슨 일인가 했더니 month라는 단어가 문제였다.
month를 yearmonth라든가 aaa같은 아무 다른 단어로 바꿔주거나,
TO_CHAR(st.ts, 'YYYY-MM') AS month 라고 "AS"를 명시해주면 잘 작동한다.

profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글