我想从两个不同的表中对两列进行求和,然后按用户ID(uid)对其进行分组。我做了小提琴,但似乎将结果乘以一列中的行数。 http://sqlfiddle.com/#!9/433a5e/3
答案 0 :(得分:1)
两个表中的每个uid
都有多行。因此,对于uid
,您将获得一个笛卡尔积 - 一个表中的2行用于uid,而另外3行则变为6行,其中包含大量重复数据。
因此,在进行连接之前聚合数据:
select s.uid, sumscore, sumorder
from (select s.uid, sum(s.score) as sumscore
from scores s
group by s.uid
) s left join
(select o.uid, sum(o.order) sumorder
from orders o
group by o.uid
) o
on o.uid = s.uid;
Here是SQL Fiddle中的结果。
答案 1 :(得分:0)
你可能正在寻找这个。试试这个,让我知道它对你有帮助。
SELECT s.uid, SUM(s.score) as score_tot, (SELECT SUM(orders.order) FROM orders WHERE orders.uid = s.uid GROUP BY orders.uid) as order_tot FROM scores as s GROUP BY s.uid