我正在关注这个话题:
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"?
(抱歉,我的代表没有让我继续上一个主题)
答案 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的家伙正在研究你真正想要的东西。对于现在的坏消息感到抱歉。