SQL查询仅在存在重复项时按列过滤

标签 sql postgresql

我正在编写一个包含“provider_id”列的数据查询。数据大部分是唯一的,除了一些所有列的条目都是唯一的,但“provider_id”是唯一的。 provider_id 的大多数值都是 1,但是当存在如上所述的重复项时,我想删除 provider_id = 1 的行。一次只有 2 个重复项。

下面的查询让我找到了所有重复项,但我不确定如何基于此选择正确的行。

select position_key, pricing_provider
from customer_data
group by position_key, pricing_provider
having count(*) > 0

我如何选择 pricing_provider != 1 的位置?

例如:

 position_key | pricing_provider |account | user 
152894  1   2   5
152704  1   2   1084
152678  6   2   43
152513  6   2   38
152305  1   2   1121
152305  6   2   1121
152300  6   2   1121
152300  1   2   1121

我要:

 position_key | pricing_provider |account | user 
152894  1   2   5
152704  1   2   1084
152678  6   2   43
152513  6   2   38
152305  6   2   1121
152300  6   2   1121

最佳答案

如果您关心重复项,我希望是 > 1,而不是 > 0。那么,窗口函数可能是最好的解决方案:

select position_key, pricing_provicer
from (select position_key, pricing_provider,
             count(*) filter (where pricing_provider <> 1) over (partition by position_key) as cnt_not_1
      from customer_data
      group by position_key, pricing_provider
      having count(*) > 1
     ) pp
where pricing_provider <> 1 or cnt_not_1 = 0;

关于SQL查询仅在存在重复项时按列过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315235/

相关文章:

sql - TSQL 将 HHMMSS 的 VARCHAR 转换为 TIME

mysql - 如何使用sql计算一小时(日期时间)内的记录数

sql - Microsoft SQL Server 中的排序依据和自定义排序

sql - 在不创建表的情况下使用 json_populate_recordset?

mysql - 将日期从 '01-JAN-85' 格式转换为表中 MySQL 可读的格式(来自 Postgres)

sql - 如何选择列值为空的行?

php - CPA 下载报价线索(php、javascript、html、sql)

mysql - 根据列值连接可变数量的表

mysql - 相同的查询在 SQL Server/Postgres 上 10 秒内完成,但在 MySQL 上 30 分钟后仍在继续

postgresql - 连接 : connection timed out