来自不同表的SQL总和和计数
表格:来自不同表的SQL总和和计数,sql,Sql,表格: UserReward: UserRewardID PK RewardID FK UserID FK UserBadge: UserBadgeID PK BadgeID FK UserID FK UserScore: UserScoreID PK UserID FK LeaderboardID FK 我需要知道分数的总和,u
UserReward:
UserRewardID PK
RewardID FK
UserID FK
UserBadge:
UserBadgeID PK
BadgeID FK
UserID FK
UserScore:
UserScoreID PK
UserID FK
LeaderboardID FK
我需要知道分数的总和,userbadge的计数和userReward的计数。
我尝试过这一点,但值不正确:
Select
u.username,
sum(us.score) as Soma_Score,
count(ur.userId) as Numero_de_rewards,
count(ub.userId) as Numero_de_crachas
from [user] u
join userscore us on u.userId = us.userID
join userbadge ub on ub.userid = u.userid
join userreward ur on ur.userid= u.userid
group by u.username
在汇总这些行之前,您是否查看了它们?您的
JOIN
s正在复制许多行
最好的方法是在聚合后加入行:
with score(userid, score) as (
Select userid
, sum(us.score) as Soma_Score
from userscore us
group by userid
), rewards (userid, rewards) as (
select userid
, count(ur.userId) as Numero_de_rewards
from userreward ur
group by userid
), crachas (userid, crachas) as
select userid
, count(userId)
from userbadge
group by userid
)
select
u.userid
, score.score
, rewards.rewards
, crachas.crachas
from user u
left join score on u.userid=score.userid
left join rewards on u.userid=rewards.userid
left join crachas on u.userid=crachas.userid
在汇总这些行之前,您是否查看了它们?您的
JOIN
s正在复制许多行
最好的方法是在聚合后加入行:
with score(userid, score) as (
Select userid
, sum(us.score) as Soma_Score
from userscore us
group by userid
), rewards (userid, rewards) as (
select userid
, count(ur.userId) as Numero_de_rewards
from userreward ur
group by userid
), crachas (userid, crachas) as
select userid
, count(userId)
from userbadge
group by userid
)
select
u.userid
, score.score
, rewards.rewards
, crachas.crachas
from user u
left join score on u.userid=score.userid
left join rewards on u.userid=rewards.userid
left join crachas on u.userid=crachas.userid
尝试:
尝试:
示例数据、您得到的信息以及您期望得到的信息都会有所帮助。检查一个项目的重要性。然后,根据需要编辑您的问题。示例数据、您得到的以及您期望得到的将有所帮助。检查一个项目的重要性。然后,根据需要编辑您的问题。