我正在编写一个包含“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/