データエンジニアリング入門キット第2週コース概要


宿題をする
PostgreSQL
MySQLで使用されているSQL文とほぼ同じですが、他の部分もあります.
アノテーション処理
注釈処理行の注釈は、--を使用する.
--以前とは関係なく、--を書いてからコメントします
SQL文でコメント処理をしたことがないのでわかりません.
複数行注釈処理は/* */である.(SQL共通)
「(二重引用符quotes)」
MySQLでWHERE文を書く場合、検索する値文字列を保護するために常に「書く」、ここで「書く」はカラム名やテーブル名などの識別子に使用されます.
( https://yahwang.github.io/posts/mysql-vs-postgres )
現在の実験環境(colab)では
SELECT *
FROM raw_data.user
WHERE userid = "184"
このように書くと、文法に文法エラーが発生し、184というcolumnは存在しません.
SELECT *
FROM raw_data.user
WHERE userid = 184
또는
SELECT *
FROM raw_data.user
WHERE userid = '184'
一緒に使うと使いやすいです.
case-insensitive vs. case-sensitive
「MySQLは大文字と小文字を区別しません.」ハロー=「ハロー」が成立します.
「PostgreSQLは大文字と小文字を区別します.」「Hello」=「Hello」は成立しません.
DATE, COUNT
SELECT DATE(ts) date, COUNT(sessionID)
上記のオーバーヘッドとしてDATEを使用すると、tsという名前のカラム(フィールド)のタイムスタンプ値から後のタイムセクションを減算し、yyy-mm-dd形式で日付値のみをロードし、「date」という名前のカラムで表示できます.
上のSELECT文のCOUNTでは、日付ごとに1つのセッションIDを数えて、同じ日付に対応するセッションIDが何個あるかを表示できます.
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番目の項目を1、2番目の項目を2と表すことができます!
DISTINCT
SELECTの列名の前にDISTINTがあるので、これを貼るとユニークな値(重複データ削除)SELECTしか与えられないと思いました.COUNT(DISTINCT userid)と一緒に使用できます.
WHEREゲートvs.ilike
likeは大文字と小文字を区別し、ilikeは大文字と小文字を区別しない.
WHERE channel ilike '%o%'
一緒に使用すると、小文字oまたは大文字Oを含むchannel内のすべての文字列を検索することを示します.
キーワード?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」と明記すれば、うまく機能します.