加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql中使用distinct去重

发布时间:2020-12-13 16:10:19 所属栏目:百科 来源:网络整理
导读:select语法 [ WITH [ RECURSIVE ] with_query [,...] ]SELECT [ ALL | DISTINCT [ ON ( expression [,...] ) ] ] [ * | expression [ [ AS ] output_name ] [,...] ] [ FROM from_item [,...] ] [ WHERE condition ] [ GROUP BY grouping_element [,...] ] [

select语法

[ WITH [ RECURSIVE ] with_query [,...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [,...] ) ] ]
    [ * | expression [ [ AS ] output_name ] [,...] ]
    [ FROM from_item [,...] ]
    [ WHERE condition ]
    [ GROUP BY grouping_element [,...] ]
    [ HAVING condition [,...] ]
    [ WINDOW window_name AS ( window_definition ) [,...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [,...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [,...] ] [ NOWAIT | SKIP LOCKED ] [...] ]

where from_item can be one of:

    [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [,...] ) ] ]
                [ TABLESAMPLE sampling_method ( argument [,...] ) [ REPEATABLE ( seed ) ] ]
    [ LATERAL ] ( select ) [ AS ] alias [ ( column_alias [,...] ) ]
    with_query_name [ [ AS ] alias [ ( column_alias [,...] ) ] ]
    [ LATERAL ] function_name ( [ argument [,...] ] )
                [ WITH ORDINALITY ] [ [ AS ] alias [ ( column_alias [,...] ] ) [ AS ] alias ( column_definition [,...] )
    [ LATERAL ] function_name ( [ argument [,...] ] ) AS ( column_definition [,...] )
    [ LATERAL ] ROWS FROM( function_name ( [ argument [,...] ] ) [ AS ( column_definition [,...] ) ] [,...] )
                [ WITH ORDINALITY ] [ [ AS ] alias [ ( column_alias [,...] ) ] ]
    from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [,...] ) ]

and grouping_element can be one of:

    ( )
    expression
    ( expression [,...] )
    ROLLUP ( { expression | ( expression [,...] ) } [,...] )
    CUBE ( { expression | ( expression [,...] )
    GROUPING SETS ( grouping_element [,...] )

and with_query is:

    with_query_name [ ( column_name [,...] ) ] AS ( select | values | insert | update | delete )

TABLE [ ONLY ] table_name [ * ]

数据

INSERT INTO "test_dist" VALUES (1,'1','a');
INSERT INTO "test_dist" VALUES (2,'b');
INSERT INTO "test_dist" VALUES (3,'c');
INSERT INTO "test_dist" VALUES (4,'2','m');
INSERT INTO "test_dist" VALUES (5,'n');
INSERT INTO "test_dist" VALUES (6,'3','j');
INSERT INTO "test_dist" VALUES (7,'j');
INSERT INTO "test_dist" VALUES (8,'4','j');

去重多个列

直接用distinct,后面的列都参与去重。只有code,name拼接的组合相同时,去掉重复的

# SELECT 
DISTINCT code,name
from test_dist;
 code | name
------+------
 1    | b
 2    | n
 4    | j
 1    | c
 1    | a
 2    | m
 3    | j
(7 rows)

去重指定列,保留其他列

当下遇到需求,需要将其中一个列去重,然后其他列随机取出就可以了。造成这种需求的原因是单表设计不合理,没有拆分成多表,造成多字段冗余,除了唯一性标志外,其他字段是相同的。目标是,取出其他字段,忽略唯一标志。

因为其他字段有重复,需要去掉重复。

# SELECT 
DISTINCT ON (code) code,id,name
from test_dist;
 code | id | name
------+----+------
 1    |  1 | a
 2    |  4 | m
 3    |  6 | j
 4    |  8 | j
(4 rows)

这里,根据code去重,id和name随机取出,这样可以获得code维度的数据。如果不去重,获得原始数据,code有重复。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读