PGSQL的distinct

概述

  这个关键字就是用来去重的,说到去重的话那就就会出现另外的一个关键字group
,之后的说明介绍也会和group进行对比分析。

  这个关键字的用法有两种,一种是单纯的distinct,另外一种是distinct on。

distinctdistinct on
相同点列内去重组内去重。select一列并且不加order by时,作用域distinct相同
语法不同select distinct 列名[,列名……] from 表名select distinct on(分组列名) 列名[,列名……] from 表名
作用不同返回某列中的非重复值按指定列分组,返回每个分组中的第一行数据
增强功能加上order by字句,可以从每个分组中取最xxx的一条数据

使用说明

  • distinct

select distinct  authorized_grant_types  from dg_client;

  这是使用distinct去重某个字段,因为时这个只能进行列内去重,如果把其他字段也一起查询出来,那么无法做到去重,出发其他字段值一样。这个去重的效果等同于group如下案例:

select authorized_grant_types from dg_client group by authorized_grant_types;

  group如此使用能达到和distinct一样的使用效果。

  根据网络结果了解,再有所有等相同的情况下,这两种去重方式的效率时差不多的,但是再没有索引等的加持下,distinct的效率要过于group【本人尚未实验证实,网络查询结果如此】

  • distinct on

select distinct on (authorized_grant_types) authorized_grant_types,* from  dg_client;

  这种去重方式为什么叫组内去重呢?因为这中方式括号内的时分组字段,也就是更据这个字段将数据分成多组,然后挑出组内的第一条数据进行展示显示。

  那么如何将组内的某条数据作为第一条进行展示呢?答案就是order by,通过排序让组内的某条数据排在第一位就可以展示了【order by 排序字段必须第一个写分组字段,后面再写其他字段】。

  这种方式的组内去重是使用group也难以做到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值