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