PostgreSQL-按列添加多个Group的“TOTAL”行

时间:2014-10-29 12:53:00

标签: postgresql

我正在关注这个话题:

PostgreSQL - making first row show as total of other rows

..我使用此查询在我的代码中完成类似的事情:

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

它工作正常,但我现在需要在总和列之前再添加两列,这些列与水果之一相似,并且我收到错误:

" ...必须出现在GROUP BY子句中或用于聚合函数"

有关如何执行上述示例的任何帮助,但有更多列,例如" fruit"?

(抱歉,我的代表没有让我继续上一个主题)

2 个答案:

答案 0 :(得分:1)

这比我想象的更容易解决。

with w as ( select fruits, vegetables, cereals, sum(a) a, sum(b) b, sum(c) c
            from basket
            group by fruits, vegetables, cereals )

select * from w union all select 'total', null, null, sum(a), sum(b), sum(c) from w

最后一个选择中的两个空值解决了问题

答案 1 :(得分:0)

你需要的东西叫做"分组集"。这里神奇的词是ROLLUP,目前PostgreSQL尚不支持。我猜它会在9.5。现在你必须继续你选择的路径(=子选择,CTE等)。 一个名叫atri shama的家伙正在研究你真正想要的东西。对于现在的坏消息感到抱歉。