イチから学ぶデータベース・SQL(4)
公開日: 2022/11/25
更新日: 2022/11/25
イチから学ぶデータベース・SQL(3)では、SQLの読みやすい書き方や間違いやすいポイントなど、実務でSQLを使っていく上での基本的なことについて学習しました。
今回は、前回同様paizaラーニングを参考にし、より深くSQLについて学習していきます。
今回は、前回同様paizaラーニングを参考にし、より深くSQLについて学習していきます。
1. 今回学習する内容
今回は、サンプルデータベースを使用し、ログの解析をしてユーザーのアクセス数を調べるなど、より実務的なことを学習していきます。
今回使うサンプルデータベースは、こちらです。
このデータベースは、オンラインRPGのデータベースを題材としています。
usersテーブルにはuserIDやjobID、名前、レベルなどの各ユーザーの情報が格納されています。そしてusersテーブルとeventlogは、userIDで関連付けられています。
jobsテーブルにはjobIDとそれに対応したjob_name(職業)の名前が格納されており、usersテーブルのjobIDとjobsテーブルのjobIDが関連付けられています。
areaテーブルにはareaIDとそれに対応したarea_name(都道府県名)が格納されており、usersテーブルのareaIDと関連付けられています。
eventlogテーブルにはlogIDやuserID、各イベントIDや、そのイベントの開始時間や終了時間のログが格納されています。
eventsテーブルには各イベント毎のタイトルや経験値、ゴールドなどが格納されています。
今回使うサンプルデータベースは、こちらです。
このデータベースは、オンラインRPGのデータベースを題材としています。
usersテーブルにはuserIDやjobID、名前、レベルなどの各ユーザーの情報が格納されています。そしてusersテーブルとeventlogは、userIDで関連付けられています。
jobsテーブルにはjobIDとそれに対応したjob_name(職業)の名前が格納されており、usersテーブルのjobIDとjobsテーブルのjobIDが関連付けられています。
areaテーブルにはareaIDとそれに対応したarea_name(都道府県名)が格納されており、usersテーブルのareaIDと関連付けられています。
eventlogテーブルにはlogIDやuserID、各イベントIDや、そのイベントの開始時間や終了時間のログが格納されています。
eventsテーブルには各イベント毎のタイトルや経験値、ゴールドなどが格納されています。
2. ログの解析をしてみる
サンプルデータベース内の行動ログを取り上げて、日時と月次のアクセス数を調べてみます。
まずは、eventlogを表示してみます。
SELECT * FROM eventlog;
このSQL文を実行します。
このようにeventlogテーブルが表示されました。
どのプレイヤー(userID)がどのevent(eventID)をいつ開始(startTime)し、いつ終了(endTime)したのかがわかります。
これからログの解析をしてアクセス数を調べていく上で、例えば、画像のuserIDが1のユーザーが新規登録をし、ログインして、と2回イベントが発生した場合アクセス数は2回、とカウントするといった具合で進めていきます。
ではまず最初に、日付情報を持つカラムを表示してみます。
SELECT startTime, logID
FROM eventlog;
イベントログと日付が表示されました。
しかし、余計な時間まで表示されてしまっているため、これを日付だけ表示します。
SELECT DATE(startTime), logID
FROM eventlog;
DATEという関数を使用すると、startTimeの日付のみを表示させることができます。
このように、startTimeに時間が表示されなくなり、日付のみが表示されました。
続いて、アクセス数を求めてみます。
日付け毎のアクセス数を求めるには、次のSQL文を実行します。
SELECT DATE(startTime), COUNT(logID)
FROM eventlog
GROUP BY DATE(startTime);
GROUP BYで日付別にまとめ、COUNT関数で行数を数えています。
このように、日付毎にカウントすることができます。
続いて、特定の日付のアクセス数を調べてみます。ここでは、3月以降のアクセス数を調べてみます。
これは条件なので、WHEREを追加します。
SELECT DATE(startTime), COUNT(logID)
FROM eventlog
WHERE DATE(startTime) >= '2015-03-01'
GROUP BY DATE(startTime);
このように、3月以降でアクセス数を表示することができました。
前に学んだように、WHEREでは=や<など、他の演算子を使用して期間を絞り込むこともできます。
さらに、特定の期間でアクセス数を表示することも可能で、それにはBETWEENとANDを使用します。
例として、5月のみでアクセス数を調べてみます。
SELECT DATE(startTime), COUNT(logID)
まずは、eventlogを表示してみます。
SELECT * FROM eventlog;
このSQL文を実行します。
このようにeventlogテーブルが表示されました。
どのプレイヤー(userID)がどのevent(eventID)をいつ開始(startTime)し、いつ終了(endTime)したのかがわかります。
これからログの解析をしてアクセス数を調べていく上で、例えば、画像のuserIDが1のユーザーが新規登録をし、ログインして、と2回イベントが発生した場合アクセス数は2回、とカウントするといった具合で進めていきます。
ではまず最初に、日付情報を持つカラムを表示してみます。
SELECT startTime, logID
FROM eventlog;
イベントログと日付が表示されました。
しかし、余計な時間まで表示されてしまっているため、これを日付だけ表示します。
SELECT DATE(startTime), logID
FROM eventlog;
DATEという関数を使用すると、startTimeの日付のみを表示させることができます。
このように、startTimeに時間が表示されなくなり、日付のみが表示されました。
続いて、アクセス数を求めてみます。
日付け毎のアクセス数を求めるには、次のSQL文を実行します。
SELECT DATE(startTime), COUNT(logID)
FROM eventlog
GROUP BY DATE(startTime);
GROUP BYで日付別にまとめ、COUNT関数で行数を数えています。
このように、日付毎にカウントすることができます。
続いて、特定の日付のアクセス数を調べてみます。ここでは、3月以降のアクセス数を調べてみます。
これは条件なので、WHEREを追加します。
SELECT DATE(startTime), COUNT(logID)
FROM eventlog
WHERE DATE(startTime) >= '2015-03-01'
GROUP BY DATE(startTime);
このように、3月以降でアクセス数を表示することができました。
前に学んだように、WHEREでは=や<など、他の演算子を使用して期間を絞り込むこともできます。
さらに、特定の期間でアクセス数を表示することも可能で、それにはBETWEENとANDを使用します。
例として、5月のみでアクセス数を調べてみます。
SELECT DATE(startTime), COUNT(logID)
3. アクティブユーザーを調べてみる
まずは、現在登録しているユーザーの人数を調べます。
SELECT COUNT(*) FROM users;
COUNTで、usersテーブルのデータの数を数えています。
このSQL文を実行すると、
このように、usersテーブルのデータ数をカウントして表示することができます。
SELECT COUNT(*) FROM users;
COUNTで、usersテーブルのデータの数を数えています。
このSQL文を実行すると、
このように、usersテーブルのデータ数をカウントして表示することができます。