也许有人可以通过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
我认为合并的部分应该是这样的:
array_to_string(array_agg(nachname|| ', ' ||coalesce(vorname, '')), '<br />') as name,
感谢您的帮助,
贝
答案 0 :(得分:1)
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;
见this SQLFiddle;请注意,它不会在名称之间显示换行符,但它们仍然存在。
使用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
。
如果您询问如何将sum
数字实际表示为数据库中的1,2345
文本字符串:不要那样做。修复您的架构。在输入和输出上格式化数字,将它们存储为numeric
,float8
,integer
,......无论作业的相应数字类型是什么。