credits, playlog, sessionlog, user
credits
列userid
与user
加入
playlog
已sessionlogid
加入sessionlog
sessionlog
已userid
加入user
。
因此,当我加入sessionlog
的任何内容时,我必须做多次才能获取用户。
我想我知道为什么会这样,我只是不知道如何防止它。
因此,每当玩家玩一个级别时,都会创建一个playlog
(并且每个playlog
包含sessionlogid
)。
当我把所有东西加在一起时,每个玩家都会像playlog
那样经常被列出,尽管我只希望他被列入一次。
当我查看来自特定玩家的积分时,我会获得2行,例如,这取决于他花了多少学分。
但是一旦我加入sessionlog
,这两行就会成倍增加似乎有多少playlog
属于那个sessionlog
- 如果他玩了5级,这两个付款行乘以5,输出为10行,每次付款。
这给了我很大的问题来计算每个级别的付款。
如何进行仅从playlog
加上sessionlog
加上其他约束的最新{{1}}的查询?
答案 0 :(得分:0)
您没有提供足够的信息。这是一次尝试:这将为您提供每个玩家花费的用户列表和多少学分:
SELECT dbo.Users.userID
, dbo.Users.userName
, SUM(dbo.Credit.CreditChange) AS NetCreditSpent
, COUNT(dbo.PlayLog.sessionlogid) AS PlayCount
, 1.0 * SUM(dbo.Credit.CreditChange) / COUNT(dbo.PlayLog.sessionlogid) AS CreditSpentPerPlay
FROM dbo.Credit
RIGHT OUTER JOIN dbo.PlayLog
INNER JOIN dbo.SessionLog
ON dbo.PlayLog.sessionlogid = dbo.SessionLog.sessionlogid
RIGHT OUTER JOIN dbo.Users
ON dbo.SessionLog.userid = dbo.Users.userID
ON dbo.Credit.userID = dbo.Users.userID
GROUP BY dbo.Users.userID, dbo.Users.userName