也许有人可以帮助我解决postgres查询。
表结构看起来像这样
nummer nachname vorname cash
+-------+----------+----------+------+
2 Bert Brecht 0,758
2 Harry Belafonte 1,568
3 Elvis Presley 0,357
4 Mark Twain 1,555
4 Ella Fitz 0,333
…
如何合并" nummer"相同并总和现金价值的领域?我的输出应该看起来像这样:
2 Bert, Brecht 2,326
Harry, Belafonte
3 Elvis, Presley 0,357
4 Mark, Twain 1,888
Ella, Fitz
我认为CoaleSce的部分应该像这样工作:
array_to_string(array_agg(nachname|| ', ' ||coalesce(vorname, '')), '<br />') as name,
感谢您的任何帮助,
托尼
SELECT
nummer,
string_agg(nachname||CASE WHEN vorname IS NULL THEN '' ELSE ', '||vorname END, E'n') AS name,
sum(cash) AS total_cash
FROM Table1
GROUP BY nummer;
请参阅此sqlfiddle;请注意,它不显示名称之间的newline字符,但它们仍然存在。
使用CASE
语句代替coalesce
,因此您在带有姓氏但没有名字的条目上没有尾随逗号。如果您想要尾随逗号,请改用format('%s, %s',vorname,nachname)
,避免所有丑陋的字符串串联业务:
SELECT
nummer, string_agg(format('%s, %s', nachname, vorname), E'n'),
sum(cash) AS total_cash
FROM Table1
GROUP BY nummer;
如果string_agg
不起作用,请获取较新的PostgreSQL或提及问题中的版本,以便显然您使用的是过时的版本。无论如何,该查询是轻量地重写以使用array_to_string
和array_agg
。
如果您询问如何实际表示为数据库中1,2345
的文本字符串的sum
数字:不执行此操作。修复您的模式。输入和输出上的格式数字,将它们存储为numeric
,float8
,integer
,...无论作业适当的数字类型是什么。