Postgresql 如何在用户id级别消除重复记录?

Postgresql 如何在用户id级别消除重复记录?,postgresql,Postgresql,假设我有与同一个人相关的条目,但某些列在一行中为空,而在另一行中为空 Name | likes cats | likes dogs | likes fish | age Bob | true | NULL | FALSE | NULL Bob | NULL | true | NULL | NULL Bob | NULL | NULL | NULL | 50 Bob | NULL

假设我有与同一个人相关的条目,但某些列在一行中为空,而在另一行中为空

Name | likes cats | likes dogs | likes fish | age
Bob  | true       | NULL       | FALSE      | NULL
Bob  | NULL       | true       | NULL       | NULL
Bob  | NULL       | NULL       | NULL       | 50
Bob  | NULL       | NULL       | true       | NULL
所有这些记录都是关于鲍勃的,但我必须把它们汇总起来才能得到一个完整的画面。有没有一种方法可以压缩所有这些内容并清除空值

压缩结果如下所示

Name | likes cats | likes dogs | likes fish | age
Bob  | true       | true       | FALSE      | 50

这是示例代码,但您可以使用:

select
      distinct on (name) name,
      likes_cats, 
      likes_dogs, 
      likes_fish, 
      age
from table
order by name, likes_cats NULLS LAST, likes_dogs NULLS LAST, likes_fish NULLS LAST, age  NULLS LAST

这是示例代码,但您可以使用:

select
      distinct on (name) name,
      likes_cats, 
      likes_dogs, 
      likes_fish, 
      age
from table
order by name, likes_cats NULLS LAST, likes_dogs NULLS LAST, likes_fish NULLS LAST, age  NULLS LAST
您可以使用
bool_和()

select name, 
       bool_and(likes_cats) as likes_cats,
       bool_and(likes_dogs) as likes_dogs,
       bool_and(likes_fish) as likes_fish,
       max(age) as age
from data
group by name;
联机示例:

您可以使用
bool\u和()
作为布尔值的聚合:

select name, 
       bool_and(likes_cats) as likes_cats,
       bool_and(likes_dogs) as likes_dogs,
       bool_and(likes_fish) as likes_fish,
       max(age) as age
from data
group by name;

在线示例:

在likes\u fish专栏:为什么选择“false”而不是“true”?在likes\u fish专栏:为什么选择“false”而不是“true”?