postgresql - 删除 PostgreSQL 8.3 上一组行中的重复字母

标签 postgresql postgresql-8.3

我有一个查询返回一组包含字母 A 组合的行, E , IL .该组合是 Alterar 的葡萄牙语助记符, Excluir , Incluir , 和 Listar .列值可以在 A 之间变化, AE , AEL , AELI ... L , LI , LIA , LIAE .

在下面的示例中,我希望能够得到一个唯一的字符串,并删除所有重复的字母。所以结果将是 AELI , 所有行的合并。

enter image description here

我的第一次尝试是使用函数组合 array_to_stringarray_agg .

select array_to_string(array_agg(colmn), '') from mytable;

然后我使用了regexp_matches函数只匹配同一字母的一个字符,但没有成功,因为返回了AELA .

select regexp_matches('AELAEILI', '[?AEIL][?AEIL][?AEIL][?AEIL]');

Here上面解释的例子。


注意事项

这里解释的问题是一段很棒的 sql 指令。这sqlfiddle是我模拟我的真实问题的努力。

最佳答案

我认为这可以通过使用 regexp_split_to_table postgresql 函数来实现。

来自文档:

Split string using a POSIX regular expression as the delimiter. See Section 9.7.3 for more information.

所以,如果有以下数据:

CREATE TABLE example_table (col TEXT);

INSERT INTO example_table(col) VALUES
  ('AEL'),
  ('A'),
  ('E'),
  ('I'),
  ('L'),
  ('LI');

查询结果 SELECT regexp_split_to_table(col, '') as col

会是

col
A
E
L
A
E
I
L
L
I

在设法像这样拆分单词后,通过添加 DISTINCT 语句过滤重复项非常简单:

SELECT DISTINCT(regexp_split_to_table(col, '')) as col
  FROM example_table

这个查询的结果将是

col
A
E
I
L

最后,我们可以使用以下代码将结果行转换为单个字符串:

SELECT array_to_string(array_agg(col),'') FROM (
  SELECT DISTINCT(regexp_split_to_table(col, '')) as col
  FROM example_table
) temp_table;

关于postgresql - 删除 PostgreSQL 8.3 上一组行中的重复字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867514/

相关文章:

ruby-on-rails - Rails 迁移从 :bigint to :integer 更改数据类型

postgresql - 聚合函数以保留特定值,具体取决于其他列

multithreading - 从 Postgres 函数中生成新进程

sql - 选择和分组

postgresql - 如何将 REAL 类型舍入为 NUMERIC?

sql - 在 PostgreSQL 中编写一个仅在工作日选择数据的函数

django - Heroku:执行查询但没有 postgresql 日志

performance - postgreSQL优化

javascript - Postgres 和 NodeJs api 中的 404 Not found 错误(可能重复)

sql - 如果与前一列匹配,PostgreSQL 将年龄加一