这里有点101,但我有一个临时表填充如下:
SELECT name, department, SUM(items) items INTO TEMPORARY TABLE foo
FROM other_table
GROUP BY name, department;
这就是要点,大约有50列,所以有50个SUM()
来电。然后我有另外一个汇总:
INSERT INTO foo SELECT name, 'sales', SUM(items) items
FROM foo
WHERE department in ('a', 'b')
GROUP BY name;
这有点繁琐的脚本 - 写入明确的列数和部门汇总/拆分(和速度),我想知道是否有一些方法来更有效地这样做。虽然这可能是唯一的方法。
答案 0 :(得分:1)
使用具有列编辑模式的不错的编辑器,获取表的列列表并编辑它们以获得所需的任何函数都是微不足道的。
所以:
\d my_table
然后将结果复制到编辑器中,修剪掉脂肪,用“Sum(”和“)”包围列名称,然后将列名称复制为列别名,后面加逗号。
我使用Sublime Text 2,但UltraEdit或几乎所有“专业”文本编辑器都会这样做。
答案 1 :(得分:0)
为了便于使用,请尝试查看物化视图...
http://www.postgresql.org/docs/9.3/static/rules-materializedviews.html
其他选项包括将查询放入视图中,每次引用视图时都会运行查询(您甚至可以将其设置为“临时”,在会话结束时将其删除)。
答案 2 :(得分:0)
你能一下子把它们全部加起来吗?
SELECT
name,
department,
SUM(items) AS items,
SUM(alpha) AS alpha,
SUM(bravo) AS bravo
SUM(charlie) AS charlie,
SUM(delta) AS delta -- etc as required
INTO TEMPORARY TABLE foo
FROM other_table
GROUP BY name, department;
然后只使用INSERT中的相关列:
INSERT INTO foo SELECT name, 'sales', SUM(items) items
FROM foo
WHERE department in ('a', 'b')
GROUP BY name;
INSERT INTO foo SELECT name, 'alpha', SUM(alpha) items
FROM foo
WHERE department in ('a', 'b')
GROUP BY name;
甚至可能;
INSERT INTO foo SELECT name, 'alpha', SUM(alpha) items,
'bravo', SUM(bravo) bravo -- etc
FROM foo
WHERE department in ('a', 'b')
GROUP BY name;