• 售前

  • 售后

热门帖子
入门百科

PostgreSQL 实现distinct关键字给单独的几列去重

[复制链接]
梦太晚616 显示全部楼层 发表于 2021-10-26 14:27:44 |阅读模式 打印 上一主题 下一主题
PostgreSQL去重题目不绝困扰着我,distinct和group by远不如MySQL用起来恣意,但是假如掌握了规律,还是和MySQL差不多的
重要先容的是distinct关键字

  1. select distinct id,name,sex,age from student
复制代码
假如有一张student表,字段如上图,我查询student表中所有信息用distinct去重(上面的SQL语句),pgsql就会根据所有的字段通过算法取得重复行的第一行,但是很显着,ID这个字段我在计划的时间不会让它重复,所以相称于没有去重
我想只根据name和age去重怎么办?

可以这么写
  1. select distinct on (name,age) id,name,sex,age from student
复制代码
这样就会只根据name和age去重了
总结一下:

distinct on (),括号里面的内容是要去重的列,括号外面的内容是你要查询展示的列,两者没有关系,你可以根据某些列去重不必将他们查询出来,末了这个举一个例子就是:
我要查询name和age,根据name和sex去重:
  1. select distinct on (name,sex) name,age from student
复制代码
增补:PostgreSQL按照某一字段去重,并表现其他字段信息
从前碰到去重的地方更多的是MySQL去重后统计,比如select count(distinct 字段) from 表,后来临时碰到用Postgresql查询全部信息,但要对某个字段去重,查资料发现select * from table group by 要去重的字段,在MySQL上可以用,就搬到Postgresql试一下发现不行,又Google一番,终于找到一种方案:select distinct on(字段) * from 表,就可以了。
如下图:

对name字段去重后再查询全部字段:

以上为个人经验,盼望能给各人一个参考,也盼望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作