私はチャットサイトを構築しており、観客にチャットを提示するために、私は3ドロップダウンリスト - スポーツ(デフォルトはすべてのスポーツ)、日/月/年、オンラインユーザー/トータルユーザーを持っています。デフォルトでは、すべてのスポーツを選択し、私は1ヶ月と総ユーザーを選択した場合2左結合がまとめられ、結果が乗算されます。しかし、それはしないでください
今、期待される結果は
する必要があります私のクエリは
SELECT DISTINCT roo.[Sports],
roo.[Name],
COUNT(DISTINCT chu.ChatUserLogId) AS TotalUsers,
COUNT(DISTINCT liu.[LoggedInUserID]) AS UserOnline
FROM Room AS roo
LEFT JOIN LoggedInUser AS liu ON roo.RoomID = liu.RoomID
LEFT JOIN ChatUserLog AS chu ON roo.RoomID = chu.RoomID
AND chu.LoggedInTime >= DATEADD(DAY,-30,GETDATE())
GROUP BY roo.[Sports], roo.[Name]
ORDER BY TotalUsers DESC
一人が私の方法で私はことを示唆しています実際には2つの結合&のために行を乗算するので、私は最初に集約する必要があります。
だから、最後に、私はこのクエリすぎ
with agg_ChatUserLog as (select RoomId, count(*) as cnt_user_tot from ChatUserLog WHERE LoggedInTime >= DATEADD(DAY,-30,GETDATE()) group by RoomId),
agg_LoggedInUser as (select RoomId, count(*) as cnt_user_logged from LoggedInUser group by RoomId)
select Sports, Name, cnt_user_tot, cnt_user_logged from Room r
left outer join agg_ChatUserLog acu on acu.RoomId = r.RoomId
left outer join agg_LoggedInUser alu on alu.RoomId = r.RoomId;
を試みたが、これも結果を乗算されます。
私は両方のクエリで間違いを犯していますか?おかげさまで、ありがとうございました。
サンプルデータは、次のとおりです。
Chatroom name Total Users Online users
Basketball
Roomname27 32 5
Roomname11 15 3
Roomname32 8 1
Football
Roomname5 63 12
Roomname18 44 7
Roomname4 15 2
2番目の方法は良いようです。サンプルデータと2番目のクエリ結果を追加します –
コメントに含まれていない質問 –
@Prdpご質問のサンプルを追加しました。ご協力いただきありがとうございます。 –