SQL:使用案例在单独的列中查找重复项和标记

Posted

技术标签:

【中文标题】SQL:使用案例在单独的列中查找重复项和标记【英文标题】:SQL : Finding duplicates and flag in separate column with Case 【发布时间】:2021-02-25 12:10:56 【问题描述】:

我正在尝试在表中查找重复项并想添加一个新的标志列。 以下示例数据:

Column A        Column B
1                888
1                999
1                777
2                444
2                444
3                555
4                222

期望的输出:

Column A        Column B         Flag_output
1                888              DUPLICATE
1                999              DUPLICATE
1                777              DUPLICATE
2                444              NULL
2                444              NULL
3                555              NULL
4                222              NULL

案例 1:当 A 列具有相同的值而 B 列中的值不同时(例如 A 列中的值 1) - 应标记为 DUPLICATE

案例 2:当 A 列在多行中与 B 列中的相同值具有相同的值时(例如 A 列中的值 2) - 应标记为空

案例 3:当 A 列和 B 列具有唯一值时(例如 A 列中的值 34) - 也应该是标记为NULL

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

你可以使用窗口函数:

select t.*,
       (case when min(b) over (partition by a) <> max(b) over (partition by a)
             then 'DUPLICATE'
        end) as flag_output
from t;

【讨论】:

真的很感激。它几乎可以工作但是我想问是否继续相同,是否可以添加这样的情况,如果 Column_A 和 Column_B 有一个分别为 1 和 777 的记录并且在所需的输出中,我们想要两行 1 和777 标记为 NULL?和值 1 888 和 1 999 的前两行将作为 DUPLICATE 提前谢谢。 @FarhanPanja 。 . .这回答了您在这里提出的问题。您的评论听起来像是一个不同的问题,应该作为问题提出。 @Gordon Linoff 谢谢你的建议。我发布了一个新问题。你能在那里看看并帮忙吗?链接如下:(***.com/questions/66392429/…)谢谢【参考方案2】:

你可以这样做:

UPDATE MISC.YOUR_TABLE SET FLAG_OUTPUT='DUPLICATE' WHERE COLUMN_A=
(SELECT COLUMN_A FROM (SELECT COLUMN_A, COUNT(*) A_COUNT FROM (SELECT DISTINCT COLUMN_A, COLUMN_B FROM MISC.YOUR_TABLE) Q GROUP BY COLUMN_A) R WHERE A_COUNT>1)

或者,如果您不更新实际列,您可以这样做:

SELECT  YT.COLUMN_A, YT.COLUMN_B, DUPQ.FLAG_OUTPUT
FROM    MISC.YOUR_TABLE YT
        LEFT OUTER JOIN
        (SELECT COLUMN_A, 'DUPLICATE' FLAG_OUTPUT FROM (SELECT COLUMN_A, COUNT(*) A_COUNT FROM (SELECT DISTINCT COLUMN_A, COLUMN_B FROM MISC.YOUR_TABLE) Q GROUP BY COLUMN_A) R WHERE A_COUNT>1) DUPQ
        ON YT.COLUMN_A=DUPQ.COLUMN_A

【讨论】:

以上是关于SQL:使用案例在单独的列中查找重复项和标记的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL查询以查找表中的列中的重复项,从而更改列的排序规则以确保重复项检查为大小写

MySQL - 在单独的列中跟踪重复记录类型

SQL 解析数字数据的列字符串并存储在单独的列中

在 csv 中查找重复项和重复项的唯一性

从csv文件(python)的列中查找最大2(或n)个值[重复]

从包含来自单独列的数据的列中选择数据