始めに
筆者がデータサイエンス100本ノックSQL編を実施するにあたって、学んだことをメモ書きしたものです。
あくまで筆者の学習履歴を残すものになります。
本編
1
- 特になし
2
- 特になし
3
- 特になし
4
- WHEREの使い方を覚えよう
5
- ANDの使い方を覚えよう
6
- 複数の条件式を覚えよう。
- 数学と同様に()を使って条件式は整備するのがポイント
7
- 数値の範囲指定をする時はBERWEENを使おう
8
- 条件の否定は"!="で表現
- "<>"でもうまくいくっぽいけど。
9
- ベンズを思い出せ。
10
- 部分一致での検索は'LIKE'を使う。
- かつ、'%'も併用しよう。
11
- 特になし
12
- '%'で文字列囲めば部分一致検索可能。
- 特定の言葉を含む文字列の検索が出来る。
- '%'はワイルドカード的な位置づけ。
13
- '~':の使い方を覚えよう。正規表現を使ったパターン一致の時に使うらしい。LIKEではないので注意。
- '^':文字列の先頭を意味するらしい。初めて見た。
- '[A:F]':これでA~Fまでを意味するらしい。数学で似たようなの見たことあるの以来の出会い。覚えよう。
- ↓結果こうなるらしい
%%sql
SELECT *
FROM customer
WHERE status_cd ~ '^[A:F]'
LIMIT 10
;
14
- 13の数値・文字末尾検索パターン。
- $:文字列の末尾を意味する。^じゃない。
%%sql
SELECT *
FROM customer
WHERE status_cd ~ '[1:9]$'
LIMIT 10
;
15
- これはわからん。初めてみた。
- '.':任意の一文字
- '*':0回以上の繰り返し
- 要するに「A:Fで始まる & ワイルドカード(=.) がX回(=*) & 1:9で終わる」を探すSQLになる。難しくなってきた。
%%sql
SELECT *
FROM customer
WHERE status_cd ~ '[A:F].*[1:9]$'
limit 10
;
16
- これも初めてみた。
- {数字}:指定された数字の回数の繰り返し
- 要するに、電話番号が数値3桁-3桁-4桁で構成されている電話番号を探すSQLを作れる。
- 問題文が自分には理解できなかった。3,3,4桁以外の電話番号もデータベースにあるんかな?
- →テーブルみたら、2桁、4桁、3桁とかあった。つまり、これらを省くことができる
%%sql
SELECT *
FROM store
WHERE tel_no ~ '^[0-9]{3}-[0-9]{3}-[0-9]{4}$'
;
17
- 'ORDER BY'と'ASC'を覚えればOK。
- LIMITつけ忘れてPCフリーズした注意。
- これは簡単。
18
- 17の降順版。
- DESC:降順を覚えればOK
19
- 初めてみた。
- RANKで順位を表示できる。
- OVERはOVER句らしい
- 難しい。OVER句が何かよくわからん。RANKにかかっている窓関数なるものらしい。
%%sql
SELECT customer_id, amount,
RANK()
OVER(ORDER BY amount DESC) AS ranking
FROM receipt
Limit 10
;
20
- 19の同一順位は別順位を表示するバージョン
- ROW_NUMBER()をRANKの代わりに使うこと
%%sql
SELECT customer_id, amount,
ROW_NUMBER() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10
;
回答にあたって参照・引用させて頂いた記事