Postgres Coalesce Fields,总和和组



也许有人可以帮助我解决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_stringarray_agg

如果您询问如何实际表示为数据库中1,2345的文本字符串的sum数字:不执行此操作。修复您的模式。输入和输出上的格式数字,将它们存储为numericfloat8integer,...无论作业适当的数字类型是什么。

最新更新