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