Mysql 在多个不相关的表上求和值?

Mysql 在多个不相关的表上求和值?,mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,我有三个表格:用户、销售额和积分 每个用户都有多个销售和多个积分 销售有一列“值”,积分有一列“分数”,就像这样 现在我想展示一个所有用户的列表,包括他们的销售额和积分 user_id | sum(sales.value) | sum(points.value) 1 | 500 | 200 2 | 213 | 132 3 . . . 是否可以在一个查询中实现,而不使用子查询 或者什么是最好、最简单的方

我有三个表格:用户、销售额和积分

每个用户都有多个销售和多个积分

销售有一列“值”,积分有一列“分数”,就像这样

现在我想展示一个所有用户的列表,包括他们的销售额和积分

user_id | sum(sales.value) | sum(points.value)
1       |   500            |    200
2       |   213            |    132
3  .  .  .
是否可以在一个查询中实现,而不使用子查询

或者什么是最好、最简单的方法?我正在尽可能地简化它,因为我有很多与用户相关的信息,我必须以这种方式显示

我尝试使用左连接,但是当我在一个查询中连接两个一对多的表时,由于重复的行,总和显然变得混乱。我试着把数据分组,但我想我迷路了

SQL中的“正确”方法是在联接表之前汇总表:

select u.user_id, sumvalue, sumscore
from users u left outer join
     (select user_id, sum(value) as sumvalue
      from sales
      group by user_id
     ) s
     on u.user_id = s.user_id left outer join
     (select user_id, sum(score) as sumscore
      from points
      group by user_id
     ) p
     on u.user_id = p.user_id;

对于以下数据,此sql提供以下结果--


您需要使用子查询。你为什么不想用呢?谢谢,我只想知道这些。这并不是我不想,我想知道是否有另一种方法,我可能不知道。
select u.user_id, sumvalue, sumscore
from users u left outer join
     (select user_id, sum(value) as sumvalue
      from sales
      group by user_id
     ) s
     on u.user_id = s.user_id left outer join
     (select user_id, sum(score) as sumscore
      from points
      group by user_id
     ) p
     on u.user_id = p.user_id;
user_id user_name
1   Davolio
2   Fuller
3   Leverling
4   Peacock
5   Buchanan
6   Suyama
7   King
8   Callahan
9   Dodsworth

sale_id user_id sale_value
10248   5   $32.38
10249   6   $11.61
10250   4   $65.83
10251   3   $41.34
10252   1   $51.30
10253   3   $58.17
10254   5   $22.98
10255   9   $148.33
10256   3   $13.97
10257   4   $81.91

point_id    user_id score
10319   7   64
10320   5   35
10321   3   3
10322   7   0 
10323   4   5
10324   9   214
10325   1   65
10326   4   78
10327   2   63
10333   5   1
10334   8   9

SELECT users.user_id,
       users.user_name,
       (SELECT SUM(sale_value)  FROM   sales
       WHERE  sales.user_id = users.user_id)  AS SalesValue,
       (SELECT SUM(score)       FROM   points
      WHERE  points.user_id = users.user_id) AS ScoreValue
FROM   users; 

user_id  user_name  SalesValue  ScoreValue
1   Davolio           $51.30    65
2   Fuller                     63
3   Leverling         $113.48   3
4   Peacock           $147.74   83
5   Buchanan          $55.36    36
6   Suyama            $11.61    
7   King                        64
8   Callahan                   9
9   Dodsworth        $148.33    214