我已经读过(这个),但是无法找到一种方法来实现它来解决我的具体问题.我知道SUM()是一个聚合函数,没有理由不使用它,但在这个特定的情况下,我必须SUM()保持每一行的所有结果.
这是表格:
--ID-- --amount--
1 23
2 11
3 8
4 7
Run Code Online (Sandbox Code Playgroud)
我需要SUM()金额,但保留每条记录,所以输出应该像:
--ID-- --amount--
1 49
2 49
3 49
4 49
Run Code Online (Sandbox Code Playgroud)
我有这个查询,但它只汇总每一行,而不是所有结果:
SELECT
a.id,
SUM(b.amount)
FROM table1 as a
JOIN table1 as b ON a.id = b.id
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
没有SUM()它只会返回一行,但我需要维护所有ID ...
注意:是的,这是一个非常基本的例子,我可以使用php在这里执行此操作,但显然表格更大,行和列更多,但这不是重点.
Zan*_*ien 14
SELECT a.id, b.amount
FROM table1 a
CROSS JOIN
(
SELECT SUM(amount) amount FROM table1
) b
Run Code Online (Sandbox Code Playgroud)
您需要执行表格中每行总和的值的笛卡尔连接id.因为subselect(49)只有一个结果,所以它基本上只是被添加到每个结果上id.
Val*_*kov 10
使用MS SQL,您可以使用OVER()
select id, SUM(amount) OVER()
from table1;
select id, SUM(amount) OVER()
from (
select 1 as id, 23 as amount
union all
select 2 as id, 11 as amount
union all
select 3 as id, 8 as amount
union all
select 4 as id, 7 as amount
) A
Run Code Online (Sandbox Code Playgroud)
--- OVER PARTITION ID
PARTITION当你想要每个MONTH做SUM()或者做季度报告销售或每年......时非常有用(注意需要明确它对所有行都做)
--- OVER PARTITION ID
Run Code Online (Sandbox Code Playgroud)
使用子查询将原始表连接到总和:
SELECT * FROM table1, (SELECT SUM(amount) FROM table1 AS amount) t
Run Code Online (Sandbox Code Playgroud)