首页 > 解决方案 > 有两个字段,如何保持唯一元素 2 值的最大数量,但不重复任何元素 1?

问题描述

我们有一些我们无法解决的问题,相关的问题可以用下面的例子来解释:

元素1 元素2
一个 1
1
C 1
一个 2
C 2
D 4
D 5
D 6

需要过滤示例表并保留最大数量的唯一 element2 值,但不重复任何 element1 值。对于此示例,一些可能的解决方案是:

元素1 元素2
一个 1
C 2
D 4
元素1 元素2
1
一个 2
D 5
元素1 元素2
1
C 2
D 6

...

标签: sqlpostgresql

解决方案


此代码将返回第一个解决方案:

with recursive optimized(n,saved) as (
select 0, cast('' as varchar)
union all
select n + 1,
    (
    case
        when (position(cast(element2 as varchar) in saved)= 0)
    then (
        case
            when(position(element1 in saved)= 0) then
        concat(element1, element2)
            else
    concat(saved)
        end
)
        else 
concat(saved)
    end
)
from
    optimized
join rownum on n + 1 = rn
),
rownum as(
select
    element1,
    element2,
    row_number() over() as rn
from
    example1
)
select distinct element1, element2
from 
    optimized
join example1 on concat(element1, element2)= saved;

这是输出:

元素1 元素2
D 4
C 2
一个 1

推荐阅读