データを収集してヒストグラムを作成しようとしています。ユーザーがシステムにログインした回数のヒストグラムを作成したい。私の目標は、この回答の機能を利用することですが、より良い方法があればそれも問題ありません。
私のログイン テーブルは次のようになります。
datetime | userid
私の最初のステップは、ユーザーがログインした回数のカウントを取得することです。
select count(userid) from logins group by userid
これにより、次のような優れた結果セットが返されます。
1325
761
4012
1204
662
1841
15
1698
...
私の質問は、SELECT CASE WHEN
リンクされた回答の方法を利用するためにこれをどのように適応させることができるかです。そのコードは次のようになります。
SELECT CASE WHEN age BETWEEN 13 AND 17 THEN '13-17'
WHEN age BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+' END AS AgeGroup,
COUNT(*) AS total
FROM MyTable
GROUP BY AgeGroup
私の場合は、しかし、age
でWHEN
句、私はそれぞれのために実行する必要はないと思うことにサブクエリがありますWHEN
。これらのビンで使用する必要があるカウントを使用する効率的な方法は何ですか?
したがって、ログイン数の範囲を作成しようとしているようです。その場合、最初にユーザーごとのログイン試行をカウントし、次に個々のカウントをさまざまなバケットに結合します。
次のクエリは、1 ~ 2回、3 ~ 4 回、および4回以上ログインしたユーザーの数を示します。
SELECT CASE WHEN total_logins BETWEEN 1 AND 2 THEN '1-2'
WHEN total_logins BETWEEN 3 AND 4 THEN '3-4'
ELSE '4+'
END AS LoginGroup,
COUNT(userid) AS total
FROM (
SELECT userid, COUNT(*) AS total_logins
FROM login
GROUP BY userid
) t
GROUP BY LoginGroup
フィドルの作業: http://sqlfiddle.com/#!9/a66396/2
実際のログイン数に基づいてバケットを作成する必要がある場合は、以下のクエリのSUM(total_logins)
代わりに使用COUNT(user_id)
します。
SELECT CASE WHEN total_logins BETWEEN 1 AND 2 THEN '1-2'
WHEN total_logins BETWEEN 3 AND 4 THEN '3-4'
ELSE '4+'
END AS LoginGroup,
SUM(total_logins) AS total
FROM (
SELECT userid, COUNT(*) AS total_logins
FROM login
GROUP BY userid
) t
GROUP BY LoginGroup
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加