SQL 如何在某些情况下突出显示重复项
SQL how to highlight duplicates under some conditions
只有在某些复杂的情况下,我才需要在购买的数据中标记重复项。假设我有一个像这样的 table:
col1 col2
1 a
1 a
1 a
2 #B
2 #B
1 a
3 #B
3 #B
2 #B
1 a
4 #A
4 #A
5 c
我需要在以下位置标记那些记录:
col2 中的值以“#”开头并且(它在 col2 中是重复值并且在 col1 中处于不同值之下)。
所以我需要得到这个:
col1 col2 newcol
1 a
1 a
1 a
2 #B 1
2 #B 1
1 a
3 #B 1
3 #B 1
2 #B 1
1 a
4 #A
4 #A
5 c
col2 中带有“#B”的行被标记的原因是它在 col2 中重复,并且“#B”可以在“3”和“2”下找到(因此有 2 个或更多不同的值)在 col1.带有“#A”的记录未被标记的原因是因为虽然它们在 col2 中是重复的,但它们在 col1 中仅低于一个值(“4”)。
我在 dashDB 工作
我认为 DashDB 支持 window 函数。如果是这样,你可以这样做:
select col1, col2,
(case when min_col1 <> max_col1 then 1 end) as flag
from (select t.*,
min(col1) over (partition by col2) as min_col1,
max(col1) over (partition by col2) as max_col1
from t
) t;
你也可以在没有 window 函数的情况下做类似的事情。
这是另一种方法:
select t.*, t2.flag
from t join
(select col2,
(case when min(col1) <> max(col1) then 1 end) as flag
from t
group by col2
) t2
on t.col2 = t2.col2;
只有在某些复杂的情况下,我才需要在购买的数据中标记重复项。假设我有一个像这样的 table:
col1 col2
1 a
1 a
1 a
2 #B
2 #B
1 a
3 #B
3 #B
2 #B
1 a
4 #A
4 #A
5 c
我需要在以下位置标记那些记录:
col2 中的值以“#”开头并且(它在 col2 中是重复值并且在 col1 中处于不同值之下)。
所以我需要得到这个:
col1 col2 newcol
1 a
1 a
1 a
2 #B 1
2 #B 1
1 a
3 #B 1
3 #B 1
2 #B 1
1 a
4 #A
4 #A
5 c
col2 中带有“#B”的行被标记的原因是它在 col2 中重复,并且“#B”可以在“3”和“2”下找到(因此有 2 个或更多不同的值)在 col1.带有“#A”的记录未被标记的原因是因为虽然它们在 col2 中是重复的,但它们在 col1 中仅低于一个值(“4”)。
我在 dashDB 工作
我认为 DashDB 支持 window 函数。如果是这样,你可以这样做:
select col1, col2,
(case when min_col1 <> max_col1 then 1 end) as flag
from (select t.*,
min(col1) over (partition by col2) as min_col1,
max(col1) over (partition by col2) as max_col1
from t
) t;
你也可以在没有 window 函数的情况下做类似的事情。
这是另一种方法:
select t.*, t2.flag
from t join
(select col2,
(case when min(col1) <> max(col1) then 1 end) as flag
from t
group by col2
) t2
on t.col2 = t2.col2;