鉴于是像这样的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
答案 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;
应该这样做。