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”?