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