PostgreSQL – 将第一行显示为其他行的总和

前端之家收集整理的这篇文章主要介绍了PostgreSQL – 将第一行显示为其他行的总和前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法让第一行与其他行不同,所以它会显示相应列的总和?

例如:

fruits|a|b|c
       total|3|4|6
      apples|1|2|3
     bananas|1|1|2
     oranges|1|1|1

有可能像这样进行查询,还是违反了sql的逻辑?
它会是这样的(暂时忽略第一行):

SELECT fruits,sum(a),sum(b),sum(c)
FROM basket

所以第一行会有所不同.它将显示单词’total’而不是水果名称,并且将显示a(1 1 1 = 3),b(2 1 1 = 4)和c(3 2 1 = 6)的总和.有可能这样做吗?谢谢

您可以使用CTE避免对表进行第二次完整扫描:

Postgresql 9.2架构:

create table basket(fruits text,a integer,b integer,c integer);
insert into basket(fruits,a,b,c) values('apples',1,1),('apples',2),('bananas',('oranges',1);

查询

with w as ( select fruits,sum(a) a,sum(b) b,sum(c) c
            from basket
            group by fruits )
select * from w union all select 'total',sum(c) from w

结果:

|  FRUITS | A | B | C |
-----------------------
| bananas | 1 | 1 | 2 |
| oranges | 1 | 1 | 1 |
|  apples | 1 | 2 | 3 |
|   total | 3 | 4 | 6 |

sql小提琴here

猜你在找的Postgre SQL相关文章