postgresql对同一列中相似的值进行排序



我正在尝试分类数据,似乎从我的数据库表相似。

表是这样的

<表类> id 账户 tbody><<tr>101121130234235456
with data as (
select
id,
account as account1,
last_value(account) over (partition by account::numeric) as account2
from your_table
)
select id, account1, account2 from data where account1 != account2;

那么,简单的答案是正确地将account存储为数字或整数数据类型,然后只需检查重复项,删除它们,最后对account施加唯一约束-完成问题解决了。但假设我将听到,我不能改变数据库成为一个不同的故事。您需要做的第一件事是过滤掉任何非数字帐户值(可能只是我,但我从不相信文本列实际上包含数字数据)。然后在剩下的元素上做一个self并赋值新的id。结果变成:(见演示)

with num_acct (id, account) as 
(select *
from test 
where account ~ '^[0-9]+$'
)     
select row_number() over() as id  
, na1.account as account1 
, na2.account as account2 
from num_acct na1
join num_acct na2
on (    na1.account::integer = na2.account::integer 
and na1.id < na2.id
);   

这不是一个明显的

  • 数据类型;
  • 什么意思account2场结果表;
  • 哪些数据必须放在id字段的结果表中;

以下是快速可靠的解决方案。

在子查询中计数唯一的数据计数(*)聚合函数。

SELECT id, account::INTEGER
FROM
(select *, count(account::INTEGER) over (partition by account::INTEGER) as count from
(VALUES
(1, '011'),
(2, '11'),
(3, '023'),
(4, '23'),
(5, '456')
) as "ID"(id, account)) as "ID"(id, account)
where count > 1

相关内容

  • 没有找到相关文章

最新更新