Postgres中的Concat行

时间:2012-09-11 12:47:12

标签: postgresql aggregate-functions concat

鉴于是像这样的Postgres表

nummer  vorname    name        cash
------|-----------|-----------|-----
1       paul       smith       500
2       andy       london      700
2       mike       dover       700
3       clara      winchester  200

要查询此表,我的sql看起来就像这样:

SELECT 
  nummer,
  vorname,
  name,  
  cash as total
FROM 
  data.myTable
GROUP BY
  nummer, 
  name,
  vorname,
  cash
ORDER BY
  nummer; 

是否可以连接nummer相同的两行(在本例中为2)。 意味着我的输出应该如下所示(如果数字相等,现金也将具有相同的值):

nummer  vorname    name        cash
------|-----------|-----------|-----
1       paul       smith       500
2       andy       london      700
        mike       dover       
3       clara      winchester  200

2 个答案:

答案 0 :(得分:10)

使用GROUP BY和汇总功能string_agg()

SELECT nummer
      ,string_agg(vorname, E'\n') AS vorname
      ,string_agg(name, E'\n') AS name
      ,cash
FROM   mytable
GROUP  BY nummer, cash
ORDER  BY nummer, cash;

我将cash添加到GROUP BY以获取原始值,并防止同一nummer的情况不同。

关于你的评论:

  

是否可以通过名称使查询唯一。意味着2 | andy   伦敦| 700列出两次,应删除。

SELECT nummer
      ,string_agg(vorname, E'\n') AS vorname
      ,string_agg(name, E'\n') AS name
      ,cash
FROM  (
   SELECT DISTINCT
          nummer, vorname, name, cash
   FROM   mytable
   ) AS m
GROUP  BY nummer, cash
ORDER  BY nummer, cash;

答案 1 :(得分:1)

SELECT nummer, 
       array_to_string(array_agg(vorname), E'\n'), 
       array_to_string(array_agg(name), E'\n'),
       cash
  FROM mytable
  group by nummer, cash;

应该这样做。