postgresql使用group by进行数据去重-2022新项目
2022/8/23 2:54:58
本文主要是介绍postgresql使用group by进行数据去重-2022新项目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、业务场景
数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重。
比如进行统计查询的时候,可以这样写 select count(dintinct(需要去重的字段)) from table;这样如果统计的时候,某个字段存在
重复时,就可以很好的去重。现在自己遇到的这种情况不能使用distinct关键字进行去重,因为表中创建得有主键ID,id并不重复,
只是数据表中保存的其他字段存在重复数据,这时候该如何去重呢?
二、需求分析
首先进行分析,表中的主键id一直是不断递增的,表中保存的字段数据可能存在重复数据,查询的时候就需要去掉这些重复数据。
举个简单的示例如下,
表中有五个字段,主键ID是一直自增的,用户ID可以存储重复数据,project、link_id、link_man字段都可以存储重复数据,这种设计
方式也是根据实际需要来进行设计的。一个用户可能对应多个项目,一个项目又可能对应联系人,用户id,项目,联系人id这三个字段
创建了对应的唯一索引,数据不会重复。就是现在需要查询的数据是根据用户ID查询对应的联系人信息,可以忽略掉项目这一栏?这个
怎么查询呢?
三、解决方案
自己首先想到的是使用distinct来进行查询,select distinct(t.link_id) link_id,id,user_id,link_man from test_group_by t;
结果没有去重.
继续进行分析,首先要对link_id进行去重,然后在查询的时候,将去重后的link_id一起传入到查询语句中,
这种方式虽然能够实现效果,可是操作起来非常地麻烦。需要写两个查询,能实现功能,可是不可取。最好
是在一个SQL中完成去重的操作。自己能想到的办法首先是使用group by进行分组操作,如下所示,
然后在这个查询的基础之上在去获取主键ID字段;
直接添加是不可取的,因为id不在group by 中。
如果加上id进行group by,则达不到去重的效果。那怎么办呢?在使用group by的时候,查询列还可以使用聚合函数,比如min或者是
Max()函数,继续改进。
这种方式达到了去重的效果,并且获取到不重复数据的主键ID,那这样就比较好办了。只取一列即可,
完成一大步了,下一步尝试在原来的简单查询的基础上使用主键id进行in的查询,看能否得到想要的结果。
测试结果可以得到想要的结果,min函数修改为max,尽量获取最新的数据。
之后进行拓展,还有一种写法也可以实现这个查询。
当然使用in查询的方式更加的简便,也更容易理解,到此使用group by 去重的方式全部完成。
这篇关于postgresql使用group by进行数据去重-2022新项目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-05快速清空 PostgreSQL 数据库中的所有表格,让你的数据库重新焕然一新!
- 2024-01-04在PostgreSQL中创建角色:判断角色是否存在并创建
- 2023-05-16PostgreSQL一站式插件推荐 -- pg_enterprise_views
- 2022-11-22PostgreSQL 实时位置跟踪
- 2022-11-22如何将PostgreSQL插件移植到openGauss
- 2022-11-11PostgreSQL:修改数据库用户的密码
- 2022-11-06Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
- 2022-10-27Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
- 2022-10-11PostgreSql安装(Windows10版本)
- 2022-09-13PostgreSQL-Network Address类型操作和函数