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有重复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。