添加两个独立表的SUM

时间:2013-06-18 14:08:28

标签: mysql

我有两张桌子

td_sell

|----------|----------------|------------------|
|  id      |   user_id      |    price         |
|----------------------------------------------|
|  1       |      2         |     10           |
|----------------------------------------------|
|  2       |      1         |      5           |
|----------------------------------------------|
|  3       |      2         |      3           |
|----------------------------------------------|

和td_commsion

|----------|----------------|------------------|
|  id      |   user_id      |    price         |
|----------------------------------------------|
|  1       |      1         |      3           |
|----------------------------------------------|
|  2       |      1         |      5           |
|----------------------------------------------|
|  3       |      2         |      3           |
|----------------------------------------------|

现在我想要像这样的SQL查询

SELECT (SUM(td_sell.price) + SUM(td_comission.price)) AS his_earning
FROM td_sell, td_comission 
WHERE td_sell.user_id='1'
AND td_comission.user_id='1'

但显示异常结果

结果应为13,但其显示为29

4 个答案:

答案 0 :(得分:1)

这将有效:

SELECT (SELECT SUM(s.price) FROM td_sell s WHERE s.user_id = 1)
+
(SELECT SUM(c.price) FROM td_comission c WHERE c.user_id = 1)

DEMO SqlFiddle

答案 1 :(得分:0)

您将获得两个表的笛卡尔连接的总和。

http://en.wikipedia.org/wiki/Cartesian_product

答案 2 :(得分:0)

SELECT sum(price)
FROM (
  SELECT * FROM td_sell
  UNION ALL
  SELECT * FROM td_commission
) a
where a.user_id=1

这是一个SQL小提琴: Fiddle

答案 3 :(得分:0)

在合并结果之前,您需要在每张表上单独进行总和。这是一种方式:

select (sell + commission) as his_earning
from (select SUM(td_sell.price) as sell
      from td_sell
      where td_sell.user_id='1'
     ) s cross join
     (select SUM(td_comission.price) as commission
      from td_comission
      where td_comission.user_id='1'
     ) c