如果该行具有超过 1 个相同的值/重复,则从选择中排除行

Posted

技术标签:

【中文标题】如果该行具有超过 1 个相同的值/重复,则从选择中排除行【英文标题】:Exclude rows from select if that row having more than 1 same value / duplicate 【发布时间】:2020-07-12 17:50:06 【问题描述】:

如果该行有重复,如何只选择没有行

ID | Amount | Status | FK
---+--------+--------+---
1  | -1000  |    T   | 10
2  | -1500  |    T   | 11
3  | -100   |    T   | 12
4  | -200   |    T   | 13
5  | -300   |    T   | 14
6  |  300   |    R   | 14

状态说明:T = Transaction,R = Refund

我怎样才能获取 id 为 1、2、3、4 的数据并排除 5 和 6?

【问题讨论】:

mysql 还是 SQL Server?它们是两种不同的产品,除非您想要两者的解决方案,否则请仅标记您正在使用的产品。也期望您向我们展示您的尝试。 【参考方案1】:

另一种选择是将 WITH TIES 与窗口函数配合使用

示例

Select top 1 with ties *
 From  YourTable
 Order By sum(1) over (partition by FK)

退货

ID  Amount  Status  FK
1   -1000   T       10
2   -1500   T       11
3   -100    T       12
4   -200    T       13

【讨论】:

这很有帮助,谢谢,但我能问你问题吗,WITH TIES 比“select * from table_name where fk not in (select fk from table_name group by fk with count(1) > 1);"正如@Jim Maculay 提到的那样?谢谢 @aldesrahim 总是乐于提供帮助 @aldesrahim 窗口函数往往相当高效。也就是说,只有在您的系统上进行实际测试才能证明最佳方法是什么。【参考方案2】:

请使用以下查询,

select * from table_name
where fk not in
(select fk from table_name group by fk having count(1) > 1);

【讨论】:

以上是关于如果该行具有超过 1 个相同的值/重复,则从选择中排除行的主要内容,如果未能解决你的问题,请参考以下文章

如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称

如何选择(所有)表 1 中的一行,该行具有与表 2 相同的另一行

MySQL-如果与另一行相似,则从TEXT字段中删除行

如果两个值匹配,则从 php 中的多维关联数组中删除重复项

如果不为null,则从同一字段更新空字段

我想要一个查询从 table2 中选择超过 4 个 AccountId 重复,在 table1 中具有不同的名称