对不起标题,但不知道如何解释。 我有一个表有2个字段A和B. 我希望找到表中具有重复A(多个记录)的所有行,但同时只有当两个行中的B不同时,A才会认为是重复的。 示例:
FIELD A Field B
10 10
10 10 // This is not duplicate
10 10
10 5 // this is a duplicate
如何在单个查询中使用
答案 0 :(得分:3)
让我们分解一下如何构建这样的查询。您没有说明是否要查找A
或所有行的所有值,但我们最初假设A
的所有值。
因此,第一步是创建A
的所有值的列表。这可以通过两种方式完成,DISTINCT或GROUP BY。我将使用GROUP BY,因为你还想做什么:
select a
from your_table
group by a
这将返回A
上唯一的一列。现在,您如何更改此选项以获得独特的价值?最明显的用法是HAVING子句,它允许您限制聚合值。例如,以下内容将为您提供A的所有值,这些值仅在表
select a
from your_table
group by a
having count(*) = 1
这就是组内A
的所有值的计数为1.您当然不希望这样,您希望使用列B
执行此操作。你需要在那里存在多个B
的值才能使你想要识别的情况成为可能(如果B只有一个值那么就不可能)。这让我们
select a
from your_table
group by a
having count(b) > 1
这仍然不够,因为您需要B
的两个不同的值。以上只计算列B
的记录数。在聚合函数内部,您可以使用DISTINCT关键字来确定唯一值;把我们带到:
select a
from your_table
group by a
having count(distinct b) > 1
要将此转录为英语,这意味着从A
中选择YOUR_TABLE
中具有多个B
值的{{1}}的唯一值。
您可以使用此方法或类似方法在创建查询时构建自己的查询。确定你想要达到的目标并慢慢建立起来。
答案 1 :(得分:-1)
通过具有计数(b)>的FIELD从your_table组中选择FIELD 1
考虑到这将返回所有重复的计数 例 如果你有价值观 1 1 2 1 对于值1而不是2,它将返回3