Postgresql 将postgres中的行与匹配字段合并

Postgresql 将postgres中的行与匹配字段合并,postgresql,Postgresql,我有一个以这种格式显示的表格格式: email | interest | major | employed |inserttime jake@example.com | soccer | | true | 12:00 jake@example.com | | CS | true | 12:01 本质上,这是一个调查应用程序,用户有时点击

我有一个以这种格式显示的表格格式:

email               |   interest  |     major   | employed  |inserttime
jake@example.com    |   soccer    |             | true      |  12:00
jake@example.com    |             |     CS      | true      |  12:01
本质上,这是一个调查应用程序,用户有时点击后退按钮添加新字段。后来我将
INSERT
逻辑更改为
UPSERT
,因此它只更新了行
,其中email=currentUsersMail
,但是对于在此代码更改之前插入的数据,单个用户有许多重复条目。我试过一些group by's,但没有成功,因为它不断地说

ID列必须出现在GROUP BY子句中或用于 聚合函数

当然,在一些边缘情况下,可能会有冲突的数据,在这种情况下,可能是用户为employed列输入了
true
,然后在第二个列中输入了
false
。现在我还不打算考虑这一点

我只想将这些值合并或展平到一行中,在这种情况下,它看起来像:

email               |   interest  |     major   | employed  |inserttime
jake@example.com    |   soccer    |     CS      | true      |  12:01

我猜我会选择最近的插入时间。我一直在用scala/play编写web应用程序,但对于这项任务,我认为如果我不能直接通过psql来完成,使用python之类的语言可能会更容易。

您可以
分组,并使用
MAX()展平:


哇,谢谢你。我试着使用MAX,但不知道如何准确地使用它。在SO允许的情况下,将在大约10分钟内标记为正确。@Kinghery14很高兴听到我能提供帮助:)
SELECT email, MAX(interest) AS interest,
       MAX(major) AS major,MAX(employed) AS employed,
       MAX(inserttime) AS inserttime
FROM your_table
GROUP BY email