不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『SQL入門編2: SQLを仕事に使おう (全11回)』を受講してみた

2021-02-13 23:07:12 | paiza

『SQL入門編2: SQLを仕事に使おう (全11回)』


前回は、LAMP環境の構築に手間取ってしまった。
どうやらSQL入門編を始める前に、AWS入門編をやっていた方が良かったみたいだな。
そこでLAMP環境の構築に関する講座があるみたいだからな。

講座を受ける順番の案内とかあったらいいのに😖 
まぁとりあえずはSQLを終わらせるか〜。

メモ

#01:仕事にもSQLを使おう 

#02:SQLの書き方のポイント

  • SQLで間違いやすいポイント
    - SELECTのカンマ忘れ、カンマ多すぎ
    - テーブル連結時のテーブル名不足
    - WHEREでAND忘れ

#03:ログ解析してみよう

  • 日次アクセス数の基本形
    • -- 日次のアクセス数を求める
      SELECT DATE(startTime), COUNT(logID)
      FROM eventlog
      GROUP BY DATE(startTime);
      • DATE関数:日付だけを表示(時間を非表示)
  • 特定の範囲の日次アクセス数の基本形
    • -- 日次のアクセス数を求める
      SELECT DATE(startTime), COUNT(logID)
      FROM eventlog
      WHERE DATE(startTime) BETWEEN "2015-04-01" AND "2015-04-30"
      GROUP BY DATE(startTime);
  • 月次アクセス数の基本形
    • -- 月次のアクセス数を求める
      SELECT DATE_FORMAT(startTime, '%Y-%m'), COUNT(logID)
      FROM eventlog
      GROUP BY DATE_FORMAT(startTime, '%Y-%m');

#04:アクティブユーザーを調べよう

  • カラム名を別名で表示する (AS)
    SELECT userID AS "アクティブユーザー"
    FROM users;
  • 空のカラムの行を表示する (IS NULL)
    SELECT userID AS "アクティブユーザー"
    FROM users
    WHERE deleted_at IS NULL;
  • 重複した行を省いて表示する (DISTINCT)
    SELECT DISTINCT userID AS "アクティブユーザー"
    FROM users;
  • 重複した行を省いて表示する (DISTINCT):COUNTを使う場合
    SELECT COUNT(DISTINCT eventlog.userID) AS "アクティブユーザー"
    FROM eventlog
    INNER JOIN users ON users.userID = eventlog.userID
    WHERE deleted_at IS NULL;
  • 日付ごとのアクティブユーザー数
    -- アクティブユーザーを求める
    SELECT
     DATE(eventlog.startTime) AS 日付,
     COUNT(DISTINCT eventlog.userID) AS "アクティブユーザー"
    FROM eventlog
     INNER JOIN users ON users.userID = eventlog.userID
    WHERE deleted_at IS NULL
    GROUP BY DATE(eventlog.startTime);

#05:データを集計しよう 

  • SELECT文の処理順
    - 1. FROM 対象テーブルからデータを取り出す
    - 2. WHERE 条件に一致するレコードを絞り込み
    - 3. GROUP BY グループ化
    - 4. HAVING 集計結果から絞り込み
    - 5. SELECT        指定したカラムだけを表示
  • SUM関数:データの合計値を計算する
  • AVG関数:平均値を計算する
  • MAX,MIN関数

#06:ユーザーの年齢を計算をしよう

  • SQLの四則演算
    • 足し算    「30 + 10」は、「40」
    • 引き算 「30 - 10」は、「20」
    • 掛け算 「30 * 10」は、「300」
    • 割り算 「30 / 10」は、「3」
    • カッコの中を先に計算    「10 * (2 + 3)」は、「60」
  • 現在の日時を求める
    CURRENT_DATE()) AS 現在日時
  • 2つの日時の間の期間を整数で求める
    TIMESTAMPDIFF(YEAR, (誕生日), (現在の日時))

#07:テキストを検索しよう 

  • テキストに部分的に一致するレコードを取り出す
    • -- テキスト検索
      SELECT
       events.event_summary
      FROM
       eventlog
       INNER JOIN events ON events.eventID = eventlog.eventID
      WHERE events.event_summary LIKE '%との闘い'

#08:サブクエリでアクティブユーザー数を求めよう

  • サブクエリを使って、日次のアクティブユーザー数を求める。
    • サブクエリは、複数のクエリを組み合わせるSQLの機能。
  • サブクエリの基本形
    -- FROM句に書く場合
    SELECT *
    FROM (サブクエリ) AS (サブクエリ名);

#09:グループ分けしよう

  • すでに分類されたデータを別の基準でグループ分けする。
    • そのために、SQLのCASE(ケース)命令を使用する。
  • CASEの基本形
    -- データを分類し直す
    SELECT
     userID,
     level,
     CASE
      WHEN (条件式1) THEN (出力1)
      WHEN (条件式2) THEN (出力2)
      ElSE (出力3)
     END
    FROM
     users

#10:クロス集計してみよう

  • クロス集計表を作る手順
    • 1. クロス集計の元になるデータを用意する
    • 2. サブクエリとして読み込む
    • 3. CASEで、特定の値だったら1にする。このとき別名を、特定の値と同じにする
       CASE WHEN クラス = "初級" THEN 1 ELSE NULL END AS "初級",
       CASE WHEN クラス = "中級" THEN 1 ELSE NULL END AS "中級",
       CASE WHEN クラス = "上級" THEN 1 ELSE NULL END AS "上級"
    • 4. SUM関数とGROUP BYで集計する

#11:サブクエリで、平均や割合を求めよう

  • サブクエリの基本形
    • FROM句に書く場合
      -- FROM句に書く場合
      SELECT *
      FROM (サブクエリ) AS (サブクエリ名);
    • WHERE句に書く場合
      -- WHERE句に書く場合
      SELECT *
      FROM users
      WHERE level = ((サブクエリ));
    • SELECT句に書く場合
      -- SELECT句に書く場合
      SELECT (サブクエリ) AS (サブクエリ名)
      FROM users;

認定証

折角前回のレッスンの前にLAMP環境を構築して、phpMyAdminを使えるようにしたのに、
今回のレッスンでは、自分の環境にデータベースを用意する部分がなかったかのが残念だったな😞 


学習ステータス

盗賊の階級が、凄腕→一流→カリスマ→伝説と進化していった。
カリスマからようやく武器を持ち出して、戦力になっていくのか?😯 


最新の画像もっと見る

コメントを投稿