0
Table1
  Colum1
    ID      Name        Size
    1       File23      912831823
    2       File29      823472348
    3       File21      912831823
    4       File24      742834882

上面是基本结构,现在我正在寻找大小的重复项,因为有时输入了错误的名称。

SELECT Name, Size, COUNT(Size) AS Counted FROM Column1 GROUP BY Size HAVING (COUNT(Size)>1) ORDER BY Counted DESC

这给了我以下

            Name        Size        Counted
            File23      912831823   2

这是一个进步,因为它计算了 Size 被重复的次数,即 2。然而,我的目标是获得这样的输出,列出每个重复项,但我不太确定如何格式化该查询。

            Name        Size        Counted
            File23      912831823   2
            File21      912831823   2

我尝试了一些不同的事情,甚至玩弄外部连接,但很明显我对此了解的并不多,谁能将我推向正确的方向?=)

4

2 回答 2

1

您必须进行聚合计数,然后重新加入源表:

SELECT t1.Name, Counts.Size, Counts.Counted 
FROM
    (
    SELECT Size, COUNT(ID) as Counted
    FROM t1
    GROUP BY Size
    ) Counts

    LEFT JOIN t1 ON t1.Size = Counts.Size
于 2013-11-05T20:23:07.837 回答
0

您可以通过对聚合查询使用连接来执行此操作:

select t1.*, agg.cnt
from table1 t1 join
     (SELECT Size, count(*) as cnt
      FROM table1
      GROUP BY Size
      HAVING COUNT(Size) > 1
     ) agg
     on t1.size = agg.size
order by agg.cnt desc, size desc;

子查询获取重复的大小。join带回原来的行。在大多数其他数据库中,您可以改为使用窗口/分析函数来执行此操作。

于 2013-11-05T20:14:33.737 回答