如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?

Posted

技术标签:

【中文标题】如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?【英文标题】:How to find Unique records (in all columns) in a table as mentioned below criteria with SQL or Python? 【发布时间】:2021-06-12 16:36:41 【问题描述】:

假设一个 Table1 有两列:col1 和 col2

col1 col2
A B
B A
C D
E F
F E

我们如何才能找到最终输出(我们必须找到唯一的记录):

col1 col2
A B
C D
E F

**** 或 ****

col1 col2
B A
C D
F E

【问题讨论】:

【参考方案1】:

你可以使用not exists:

select col1, col2
from t
where col1 < col2 or
      not exists (select 1
                  from t t2
                  where t2.col1 = t.col2 and t2.col2 = t.col1
                 );

即选择col1 &lt; col2 所在的所有行。或者,选择不存在此类行的所有行。

【讨论】:

@DeepanshiSet 请检查A Tour。如果您认为这个答案足够好,它可以帮助您解决问题,您可以接受它和/或选择将其投票为最相关和最有帮助的。这有助于未来的读者至少找到解决类似问题的方法,并向其他人展示这个问题有帮助的答案,无需深入研究 cmets【参考方案2】:

这个 sn-p 无法找到所有可能的“唯一”集合,但它至少可以找到一个。希望它可以解决您当前的问题。

table = [['A', 'B'],
         ['B', 'A'],
         ['C', 'D'],
         ['E', 'F'],
         ['F', 'E']]
unique_set = set()
for row in table:
    tmp = frozenset(row)
    if tmp not in unique_set:
        unique_set.add(tmp)

print(unique_set)

【讨论】:

【参考方案3】:

我喜欢 pythonic 解决方案,这是我的方式:

df

  col1  col2
0   A   B
1   B   A
2   C   D
3   E   F
4   F   E

创建新列

df['test'] = [sorted(x) for x in list(zip(df['col1'],df['col2']))]

输出:

  col1  col2  test
0   A   B   [A, B]
1   B   A   [A, B]
2   C   D   [C, D]
3   E   F   [E, F]
4   F   E   [E, F]

删除重复并获取索引:

idx = df['test'].astype(str).drop_duplicates().index

新数据框:

del df['test']
df.loc[idx]

.

  col1  col2
0   A   B
2   C   D
3   E   F

【讨论】:

以上是关于如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL,在视图中重复相同的标量子查询性能

数组结果在下面列出一个?

如何使用sql server数据库中的标量值函数

如何对齐python输出[重复]

如何将 Python 字符串变量添加到 Python 中 SQL 字符串变量的一部分?

用Python创建日记