来自不同表的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
尝试:

尝试:


示例数据、您得到的信息以及您期望得到的信息都会有所帮助。检查一个项目的重要性。然后,根据需要编辑您的问题。示例数据、您得到的以及您期望得到的将有所帮助。检查一个项目的重要性。然后,根据需要编辑您的问题。