给定的是这样的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

最佳答案

使用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 |安迪
伦敦| 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;

09-12 10:52