タイトルだけみるとなんのこっちゃですね。
これでユーザーごとにグルーピングしてゲームのプレイ回数を、ユーザー数分だけ取得することができます。ここで得られた結果レコードをテーブルとして扱ってしまい、副問い合わせとしてSQL文を組み立てます。
SELECT COUNT(user_id) FROM play_log GROUP BY user_id
といったGROUPで別けてCOUNTする方法はよく知られているかと思いますが、ここでとってきたCOUNTの値を元にGROUPで別けてCOUNTする仕事が出てきたのでちょっと悩みました。
私の例では、一回ゲームをするたびINSERTされるログから、X回ゲームをプレイするユーザーがY人いる、といった分布を作るものでした。
■■キーワード■■
・副問い合わせ
冒頭と重複しますが、
SELECT COUNT(user_id) FROM play_log GROUP BY user_id
イメージとしては下記のような感じです。
上記の[結果レコード]の中身を副問い合わせにすればOKです。
ヴィジュアル的に説明できていないのでわかりづらいかもしれませんが、上記SQLで、X回ゲームしたユーザーがY人という分布表の結果レコードが得られます。
SELECT X,COUNT(X) AS Y FROM [結果レコード] GROUP BY X
SELECT X,COUNT(X) AS Y FROM (
) AS X_TABLESELECT COUNT(user_id) AS X FROM play_log GROUP BY user_id
GROUP BY X
以上、今日の覚書でした。