PostgreSQL中同名列的总和
我有一张这样结构的桌子:PostgreSQL中同名列的总和,sql,postgresql,sum,Sql,Postgresql,Sum,我有一张这样结构的桌子: op | name | amount | total | 1 | a | 40 | 2 | 2 | a | 80 | 4 | 5 | b | 30 | 5 | 6 | b | 50 | 7 | 1 | c | 20 | 1 | 3 | c | 30 | 4 | 我希望根据name列添加amount和total列(我
op | name | amount | total |
1 | a | 40 | 2 |
2 | a | 80 | 4 |
5 | b | 30 | 5 |
6 | b | 50 | 7 |
1 | c | 20 | 1 |
3 | c | 30 | 4 |
我希望根据name
列添加amount
和total
列(我需要op
列保持显示)。对于本例,我的选择将返回以下结果:
op | name | amount | total |
1 | a | 120 | 6 |
2 | a | 120 | 6 |
5 | b | 80 | 12 |
6 | b | 80 | 12 |
1 | c | 50 | 5 |
3 | c | 50 | 5 |
我可以用PostgreSQL来做这件事吗?你可以用窗口函数
SUM()来做这件事
op |名称|金额|总计
-: | :--- | -----: | ----:
1 | a | 120 | 6
2 | a | 120 | 6
5 | b | 80 | 12
6 | b | 80 | 12
1 | c | 50 | 5
3 | c | 50 | 5
DBFIDLE创建模式:
create table tab (
op integer,
name varchar,
amount integer,
total integer
);
insert into tab values
(1,'a',40,2),
(2,'a',80,4),
(5,'b',30,5),
(6,'b',50,7),
(1,'c',20,1),
(3,'c',30,4);
选择
语句:
select t1.op, t1.name, t2.amount, t2.total
from tab t1
inner join (select name,
sum(amount) as amount,
sum(total) as total
from tab
group by name) t2
on t1.name = t2.name
结果:
op
名称
数量
全部的
1.
A.
120
6.
2.
A.
120
6.
5.
B
80
12
6.
B
80
12
1.
C
50
5.
3.
C
50
5.
非常感谢你:好主意!问题是我无法在运行查询的地方使用窗口:/Thank!
op | name | amount | total
-: | :--- | -----: | ----:
1 | a | 120 | 6
2 | a | 120 | 6
5 | b | 80 | 12
6 | b | 80 | 12
1 | c | 50 | 5
3 | c | 50 | 5
create table tab (
op integer,
name varchar,
amount integer,
total integer
);
insert into tab values
(1,'a',40,2),
(2,'a',80,4),
(5,'b',30,5),
(6,'b',50,7),
(1,'c',20,1),
(3,'c',30,4);
select t1.op, t1.name, t2.amount, t2.total
from tab t1
inner join (select name,
sum(amount) as amount,
sum(total) as total
from tab
group by name) t2
on t1.name = t2.name