抱歉这个可怕的头衔。我只能描述一下情况。
我有一个名为User的数据库表,其列名为Username和ID,表名为UserScore,其中包含一个名为Score的整数列。
我想创建得分的平均值,所以基本上我使用avg(Score) as AverageScore
来获得平均值。
问题在于,并非我的数据库中的每个用户都有UserScore记录,但我确实想要计算它们,并且在不必为其创建记录的情况下将其得分为0。
如何在不必将数据提取到我的程序并在那里取得平均值的情况下如何做到这一点?
答案 0 :(得分:2)
从User
表中进行选择,并在UserScore
表格中使用左连接。然后使用coalesce
(或isnull
,您在这里选择)将NULL考虑为零:
select avg(coalesce(Score,0)) as AverageScore
from User
left outer join UserScore on User.ID = UserScore.UserID
或者,如果您想获得每个用户的平均分数,您可以遵循类似的原则:
select User.Username, coalesce(avg(Score),0) as AverageScore
from User
left outer join UserScore on User.ID = UserScore.UserID
group by User.Username
注意,我假设您的UserScore
表格中有一列UserID
。
答案 1 :(得分:1)
试试这个:
SELECT u.Username,AVG(ISNULL(us.Score,0))
FROM Users u
LEFT JOIN UserScore us on u.Id=us.UserId
GROUP BY u.Username
答案 2 :(得分:0)
您可以使用合并功能将缺失的分数替换为零。
http://msdn.microsoft.com/en-us/library/ms190349.aspx
select avg(coalesce(Score, 0)) as AverageScore
from User
left join UserScore on User.ID = UserScore.ID
group by User.ID