0

ゲームの場合、( MySQLを使用して) 1 時間ごとにユーザーのサインアップ数をカウントしたいと考えています。そのようなものは非常に簡単です:

SELECT COUNT(*), DAY(date_user), HOUR(date_user) 
FROM users, 
GROUP BY DAY(date_user), HOUR(date_user)

あとは、1回以上ゲームをプレイしたユーザーのみを考慮したいと思います。スコアを持つ2番目のテーブルがあります。

SELECT COUNT(*), DAY(date_user), HOUR(date_user) 
FROM users, scores 
WHERE users.id = scores.userid 
GROUP BY DAY(date_user), HOUR(date_user)

すばらしい...次のように、2 つのクエリの結果が 1 つのテーブルになるようにします。

Global signups | Signups of playing users | Day | Hour

これに対する有効なクエリはまだ見つかりません。ユニオンを使用する必要がありますか? それとも加入?

4

1 に答える 1

2

1 つの方法を次に示します。

select 
    day(date_user)
,   hour(date_user)
,   count(distinct u.id) as GlobalSignups
,   count(distinct s.userid) as SignupsOfPlayingUsers
from users u
left join scores s on u.id = s.userid
group by day(date_user), hour(date_user)

個別のユーザー ID をカウントすると、ユーザーの総数が得られます。左結合が失敗すると、s.useridになりNULLNULLsではカウントされませんcount()。サインcount(distinct s.userid)アップしたユーザーの数を返します。

于 2009-12-27T15:24:55.267 に答える