洋書、時々プログラミング

博士課程修了→メーカーという経路を辿っている人の日常

データサイエンス100本ノック(SQL)備忘録(追記済)

応用情報技術者試験のついでにSQLの知識叩き込もうとした結果、データサイエンス100本ノックにたどり着いてやり始めたのでメモ。教科書の知識に加えて実践でやってエラー出せば出すほど理解が深まる気がする。

データサイエンス100本ノックの概要とWIn10への導入方法

データサイエンス100本ノックの概要

github.com

 

導入方法

www.cresco.co.jp

上のサイトを見ながらdockerを導入し、コンテナを稼働するとJupyter lab上でSQLコードを書けるようになる。

 

個人的メモ(含ネタバレ)

  • S-015とS-016の正規表現は覚えておく
  • S-020とS-021のRANK OVERとROW_NUMBERの使い分け
  • S-022のDISTINCTの使い方
  • S-026 なぜWHEREでやろうとして詰まった。Aggregate function使うときは処理の順番的にHAVING
  • S-027 ORDER BY のBYを忘れて詰んだ
  • S-028 percentile_cont(0.50) WITHIN GROUP を使うという話 始めて知った
  • S-029 難しい。 WITHINはGROUP BYの中でさらにGROUP BYを使う時に使うのか
    COUNT(1)とCOUNT(*)は同じ出力が返ってくる。コード例1はもう一度見返す。
  • S-030 標本分散はVAR_SAMP関数。ORDERとGROUPの順番注意
  • S-031 標本標準偏差はSTDDEV_SAMP
  • S-032 PERCENTIL(a) WITHIN GROUP (ORDERED BY XXX)を使いこなそう
  • S-033 これは分かった

S-034から2日目

  • S-040 CROSS JOIN
  • S-041 LAG
  • S-042 LAG関数の応用
  • S-043 TRUNCが切り捨てクロス集計はSQLには不向き? 気合入れればできるけど *あとで見直す
  • S-044 答えみたら力技だった
  • S-045 TO_CHAR関数 
  • S-046 TO_DATE関数 どちらもフォーマット指定が大事
  • S-047 CAST
  • S-048 TO_TIMESTAMP
  • S-049 EXTRACT
  • S-050 FM00とFM99の違い
  • S-055 WITHを2個使うとかまだハードルが高い。でもいけそう
  • S-056 LEASTとかはPythonと同じような感じかなぁ
  • S-057 '||'で文字列の連結
  • S-058 ダミー変数という言葉を知る
  • S-059 STDDEV_SAMPだけ詰まった
  • S-060 *1.0でFLOATに変換してる?
  • S-061 LOG10関数 これデータサイエンスでよくある手法。 +1することでエラー回避
  • S-062 LN関数
  • S-063 ここまで解いたならこの問題は余裕
  • S-066 ROUND関数が四捨五入
  • S-067 CEILで切り上げ
  • S-070 型の違う2種類のタイムスタンプの変換 EXTRACT TO_TIMESTAMP CAST
  • S-074 DOW関数ってこう使うんだね。同じSELECT内では変数の共有ができない
  • S-076 件名別に番号付けするという発想が大事。PARTITIONが出てくる
  • S-079 CASE構文とSUM構文を使ったNULL数の計算方法

以降もやって終わり インプットアウトプットとかはまた必要になったら随時戻ってくる予定