【问题标题】:Select count of duplicated rows returns wrong result [duplicate]选择重复行数返回错误结果[重复]
【发布时间】:2016-09-10 08:24:54
【问题描述】:

我有一个包含 82,535 行的表,其中 65,087 行是唯一的 ID。当我提取 82,535 的整个结果集并复制到 Excel 并删除重复项时,它显示有 17,448 个重复项。但是当我使用下面的查询时,我得到了不同的结果:

SELECT
    BLD_ID, COUNT(BLD_ID) AS [BLD_ID COUNT] 
FROM
    Project.BreakageAnalysisOutcome_SentToAIM 
GROUP BY 
    BLD_ID 
HAVING 
    COUNT(BLD_ID) > = 2

此查询返回值 17,364

我确定唯一 BLD_ID 的数量是 65,087

【问题讨论】:

  • 你可以有一些是一式三份或更多。这将改变计数。使用“Having count(BLD_ID) > = 3”再次运行查询
  • 您是如何从查询中计算出 17,364 的?从您的查询中,重复数应该是 sum([BLD_ID COUNT]) - (number of row fetch) 所以您应该重写它以获得正确的数字。

标签: sql sql-server select duplicates


【解决方案1】:

最可能的原因是重复记录可能出现超过 2 次。

查找重复计数

Select  COUNT(BLD_ID)- COUNT( DISTINCT BLD_ID) 
From Project.BreakageAnalysisOutcome_SentToAIM 

【讨论】:

    【解决方案2】:

    将 CTE 与 Row_Number 函数一起使用,而不是使用 group by 子句和 filer by Row_Number > 1 计数。

    ;与 cte 作为 ( 选择身份证, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS Rn 来自 [表 1] ) DELETE cte WHERE Rn > 1

    【讨论】:

    • DELETE 语句如何回答所提出的问题?该问题没有提到删除具有重复值的行。它询问“选择重复项的数量”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多