1

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

2 回答 2

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;

我添加cashGROUP BY以达到原始值并防止相同的情况不同nummer

至于你的评论:

是否可以通过名称来唯一化查询。表示如果 2|andy london|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;
于 2012-09-11T13:03:19.923 回答
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;

那应该这样做。

于 2012-09-11T12:58:42.847 回答