我已经阅读了(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在这里执行此操作,但显然表格更大,行和列更多,但这不是重点。
答案 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