『SQL入門編2: SQLを仕事に使おう (全11回)』
前回は、LAMP環境の構築に手間取ってしまった。
どうやらSQL入門編を始める前に、AWS入門編をやっていた方が良かったみたいだな。
そこでLAMP環境の構築に関する講座があるみたいだからな。
講座を受ける順番の案内とかあったらいいのに😖
まぁとりあえずはSQLを終わらせるか〜。
メモ
#01:仕事にもSQLを使おう
- 参考になるWebサイト
- AWS入門編1:Webサーバを構築しよう
https://paiza.jp/works/aws/primer/aws1 - AWS入門編2:LAMP環境を構築しよう
https://paiza.jp/works/aws/primer/aws2 - SQL入門編1: SQLの基本文法を学ぶ
https://paiza.jp/works/sql/primer/beginner-sql1
- AWS入門編1:Webサーバを構築しよう
#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;
- FROM句に書く場合
認定証
折角前回のレッスンの前にLAMP環境を構築して、phpMyAdminを使えるようにしたのに、
今回のレッスンでは、自分の環境にデータベースを用意する部分がなかったかのが残念だったな😞
学習ステータス
盗賊の階級が、凄腕→一流→カリスマ→伝説と進化していった。
カリスマからようやく武器を持ち出して、戦力になっていくのか?😯
※コメント投稿者のブログIDはブログ作成者のみに通知されます