使用SUM()而不对结果进行分组

时间:2012-07-06 07:24:05

标签: mysql sum

我已经阅读了(this),但无法找到将其实施到我的具体问题的方法。我知道SUM()是一个聚合函数,没有理由不使用它,但在这种特定情况下,我必须SUM()所有结果,同时保持每一行。

这是表格:

--ID-- --amount--
  1        23
  2        11
  3        8
  4        7

我需要SUM()金额,但保留每条记录,所以输出应该是这样的:

--ID-- --amount--
  1        49
  2        49
  3        49
  4        49

我有这个查询,但它只汇总每一行,而不是所有结果:

SELECT 
    a.id,
    SUM(b.amount)

FROM table1 as a 
JOIN table1 as b ON a.id = b.id
GROUP BY id

如果没有SUM(),它只返回一行,但我需要维护所有ID ...

注意:是的,这是一个非常基本的例子,我可以使用php在这里执行此操作,但显然表格更大,行和列更多,但这不是重点。

4 个答案:

答案 0 :(得分:13)

SELECT a.id, b.amount
FROM table1 a
CROSS JOIN
(
    SELECT SUM(amount) amount FROM table1
) b

您需要为每个id执行表格中每行总和的cartesian join。由于子选择(49)只有一个结果,因此它基本上只会加到每个id上。

答案 1 :(得分:5)

使用子查询将原始表加入总和:

SELECT * FROM table1, (SELECT SUM(amount) FROM table1 AS amount) t

答案 2 :(得分:0)

这只会进行一次sum()查询,因此执行正常:

SELECT a.id, b.amount
FROM table1 a
cross join (SELECT SUM(amount) as amount FROM table1 AS amount) b

答案 3 :(得分:0)

如果其他人有同样的问题并且没有加入我们可以执行以下操作

select *
,totcalaccepted=(select sum(s.acceptedamount)  from cteresult s)
, totalpay=(select sum(s.payvalue)  from cteresult s)     
from cteresult  t
end