かずおじです。データサイエンティスト100本ノックSQL版をDb2 on cloud環境で解いてみました。本記事は問題S001-S020での気づきをまとめました。
【サイトはこちら —> データサイエンス100本ノック(構造化データ加工編)】
【他の記事まとめ —> 【SQL】データサイエンティスト100本ノック、Db2でやってみた(まとめ)】
気づきまとめ(S001-020)
- 前半は基本的な構文。(LIKE文で条件指定など)
- REGEXP_LIKE関数で正規表現を使った条件指定ができる。
- 「FETCH FIRST [行数] ROWS ONLY」= LIMIT句 である。
- 「RANK() OVER(ORDER BY [列名])」でランク付ができる。
行数指定(共通)
Db2での行数指定は、「FETCH FIRST [行数] ROWS ONLY」だが、MySQLの「LIMIT句」も使用可能。私の感覚だと、LIMIT句の方がラク。
問題S001
FETCH FIRST…の場合
SELECT
*
FROM
RECEIPT
FETCH FIRST 10 ROWS ONLY;
LIMIT句の場合
SELECT
*
FROM
RECEIPT
LIMIT
10;
正規表現を使った条件指定(S013-S016)
LIKE文は基本的な構文だが、REGEXP_LIKE関数を使用して、正規表現を使って条件指定可能。
REGEXP_LIKE( 列名, 正規表現 )
参照: REGEXP_LIKE 述部
ただし、LIKE文とは書き方とは異なるため、注意。
問題S013
SELECT
*
FROM
CUSTOMER
WHERE
REGEXP_LIKE(STATUS_CD,'^[A-F]')
LIMIT
10;
ランク付け(S019-S020)
OLAP関数のRANK()を使用して、ランキング番号を付与することができる。
RANK() OVER(ORDER BY 列名)
(降順の場合)
RANK() OVER(ORDER BY 列名 DESC)
参考:OLAP 指定
問題S019
SELECT
RANK() OVER(ORDER BY AMOUNT DESC) AS RANKING,
CUSTOMER_ID, AMOUNT
FROM
RECEIPT
LIMIT
10;
おわりに
今回は最初の問題だったので、基礎的な内容でしたが、意外と知らないこともありました。特にREGEXP_LIKE関数は知らなかったし、今後使えそうだなと思いました。
次は、問題S021-問題S030についての気付きをまとめます。