月ごとのアクティブユーザー数も以前学習しましたが、こちらもサブクエリを使って求めていきます。
まずは、月ごとで重複しないユーザーのみを取り出します。
SELECT DISTINCT
DATE_FORMAT(startTime, '%Y-%m') AS yearMonth,
eventlog.userID AS user
FROM eventlog
INNER JOIN users ON users.userID = eventlog.userID
WHERE deleted_at IS NULL;
DATE_FORMAT関数を使用してyyyy-mmという形で年と月を指定しています。
あとは、日ごとを同じようにDISTINCTで重複しないように、deleted_atに値が入っていないデータを取り出しています。
このSQLを実行すると、
このように、月ごとで重複しないユーザーを取り出せました。
次は、サブクエリを使ってアクティブユーザー数を求めてみます。
SELECT yearMonth, COUNT(user) AS アクティブユーザー数
FROM (SELECT DISTINCT
DATE_FORMAT(startTime, '%Y-%m') AS yearMonth,
eventlog.userID AS user
FROM eventlog
INNER JOIN users ON users.userID = eventlog.userID
WHERE deleted_at IS NULL) AS ActiveUsers
GROUP BY yearMonth;
日ごとのアクティブユーザー数の求め方と同じように、GROUP BYで年月をまとめ、userの数をCOUNTでカウントしています。
このSQLを実行すると、
このように、月ごとのアクティブユーザー数を求める事ができました。