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

时间:2015-10-23 19:36:44

标签: postgresql

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

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

基本上,这是一个调查应用程序,用户有时会点击后退按钮添加新字段。我后来将INSERT逻辑更改为UPSERT,因此它只更新了行where email=currentUsersEmail,但是对于在此代码更改之前插入的数据,单个用户有许多重复的条目。我已经尝试了一些没有运气的小组,因为它不断地说

  

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

当然会出现可能存在冲突数据的边缘情况,在这种情况下,用户可能会为使用的列输入true,然后在第二种情况下他/她可以输入false。目前我还没有考虑到这一点。

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

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

我猜我会采用最新的插入时间。我一直在scala / play中编写web应用程序,但是对于这个任务,我认为如果我不能直接通过psql来使用像python这样的语言可能会更容易。

1 个答案:

答案 0 :(得分:1)

您可GROUP BY使用MAX()展平:

SELECT email, MAX(interest) AS interest,
       MAX(major) AS major,MAX(employed) AS employed,
       MAX(inserttime) AS inserttime
FROM your_table
GROUP BY email