gpt4 book ai didi

postgresql - postgres合并字段,求和和分组依据

转载 作者:行者123 更新时间:2023-11-29 13:35:34 25 4
gpt4 key购买 nike

也许有人可以帮我解决 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”相同的字段并对现金值(value)求和?我的输出应该是这样的:

   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,   

感谢您的帮助,

托尼

最佳答案

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_stringarray_agg 无论如何。

如果您询问如何对数据库中实际表示为文本字符串(如 1,2345)的数字求和:不要那样做。修复您的模式。改为在输入和输出上格式化数字,将它们存储为 numericfloat8integer,...无论适合作业的数字类型是什么.

关于postgresql - postgres合并字段,求和和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13227878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com