有什么办法可以使第一行与其余行有所不同,以便显示相应列的总和?
例如:
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, 1), ('apples', 0, 1, 2), ('bananas', 1, 1, 2), ('oranges', 1, 1, 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(a), sum(b), sum(c) from w
结果 :
| FRUITS | A | B | C | ----------------------- | bananas | 1 | 1 | 2 | | oranges | 1 | 1 | 1 | | apples | 1 | 2 | 3 | | total | 3 | 4 | 6 |