如何检测此方案中的重复项,以解释内部差异?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检测此方案中的重复项,以解释内部差异?相关的知识,希望对你有一定的参考价值。

我有这个SQL查询,它可以检测[Type]的重复出现。

select Type, count(1) as 'Occurences' from [dbo].[Policy]
 where PolicyDescription ='ABC' 
group by Type
 HAVING COUNT(1)>1

但是同一个表[Policy]也有一列[Id],我上面的查询没有根据[Id]进行区分。

我希望上面的查询只考虑[Id]也不同的结果。

我应该实施哪些改变?

样本数据

DECLARE @Policy AS TABLE
(
    ID int,
    PolicyDescription char(3),
    Type int
)

INSERT INTO @Policy(ID, PolicyDescription, Type) VALUES
(1, 'ABC', 123),
(1, 'ABC', 123),
(2, 'ABC', 456),
(3, 'ABC', 567),
(4, 'ABC', 567),
(3, 'ABC', 567)

目前的结果

 Type | Occurences
------|------------
   123|           2
   567|           3

期望的结果

 Type | Occurences
------|------------
   567|           2 
答案

你可以把你的COUNTDISTINCT结合起来。

SELECT Type, COUNT(DISTINCT Id) AS 'Occurences'
FROM Policy
WHERE PolicyDescription = 'ABC'
GROUP BY Type
HAVING COUNT(DISTINCT Id) > 1
另一答案

你只需要改变:

from policy

至:

from (select distinct * from policy)

像这样:

select t.type, count(1) as 'Occurences' 
from (select distinct * from policy) t
where t.policydescription ='ABC' 
group by t.type
having count(1) > 1

demo

以上是关于如何检测此方案中的重复项,以解释内部差异?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

Apache Spark 如何检测重复项?可以修改吗?

如何创建片段以重复变量编号中的代码行

如何删除 MySQL 表中的重复项

C++:如何检测向量中的重复项并打印一份?

从片段内部调用活动方法[重复]