这个关键字就是用来去重的,说到去重的话那就就会出现另外的一个关键字group
,之后的说明介绍也会和group进行对比分析。
这个关键字的用法有两种,一种是单纯的distinct,另外一种是distinct on。
distinct | distinct on | |
---|---|---|
相同点 | 列内去重 | 组内去重。select一列并且不加order by时,作用域distinct相同 |
语法不同 | select distinct 列名[,列名……] from 表名 | select distinct on(分组列名) 列名[,列名……] from 表名 |
作用不同 | 返回某列中的非重复值 | 按指定列分组,返回每个分组中的第一行数据 |
增强功能 | 无 | 加上order by字句,可以从每个分组中取最xxx的一条数据 |
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【本人尚未实验证实,网络查询结果如此】
select distinct on (authorized_grant_types) authorized_grant_types,* from dg_client;
这种去重方式为什么叫组内去重呢?因为这中方式括号内的时分组字段,也就是更据这个字段将数据分成多组,然后挑出组内的第一条数据进行展示显示。
那么如何将组内的某条数据作为第一条进行展示呢?答案就是order by,通过排序让组内的某条数据排在第一位就可以展示了【order by 排序字段必须第一个写分组字段,后面再写其他字段】。
这种方式的组内去重是使用group也难以做到的。