【问题标题】:sql query to find the duplicate recordssql查询查找重复记录
【发布时间】:2015-10-14 02:46:48
【问题描述】:

根据最高计数和id显示记录,查找重复记录并以降序显示的sql查询是什么。

例如:

获取计数可以通过

select title, count(title) as cnt from kmovies group by title order by cnt desc

结果会像

title cnt

ravi   10
prabhu  9
srinu   6

现在得到如下结果的查询是什么:

ravi
ravi
ravi
...10 times
prabhu
prabhu..9 times
srinu
srinu...6 times

【问题讨论】:

    标签: sql duplicates


    【解决方案1】:

    如果您的 RDBMS 支持 OVER 子句...

    SELECT
       title
    FROM
        (
        select
           title, count(*) OVER (PARTITION BY title) as cnt
        from
          kmovies
        ) T
    ORDER BY
       cnt DESC
    

    【讨论】:

      【解决方案2】:

      您可以在单个查询中完成:

      Select t.Id, t.title, z.dupCount
      From yourtable T
      Join
         (select title, Count (*) dupCount
          from yourtable 
          group By title
          Having Count(*) > 1) z
         On z.title = t.Title
      order By dupCount Desc
      

      【讨论】:

        【解决方案3】:

        此查询使用Group ByHaving 子句允许您选择(定位并列出)每条重复记录。 As 子句便于在 selectOrder By 子句中引用 Quantity,但实际上并不是获取重复行的一部分。

        Select
            Title,
            Count( Title ) As [Quantity]
           From
            Training
           Group By
            Title
           Having 
            Count( Title ) > 1
           Order By
            Quantity desc
        

        【讨论】:

          【解决方案4】:
          select distinct title, (
                         select count(title) 
                         from kmovies as sub 
                         where sub.title=kmovies.title) as cnt 
          from kmovies 
          group by title 
          order by cnt desc
          

          【讨论】:

            【解决方案5】:

            您不能将其作为一个简单的单个查询来完成,但可以这样做:

            select title
            from kmovies
            where title in (
                select title
                from kmovies
                group by title
                order by cnt desc
                having count(title) > 1
            )
            

            【讨论】:

            • 这不会给出正确的结果,因为不会以 COUNT() 降序重复行。这不是 *outermost ORDER BY 所以顺序是任意的。单个查询解决方案还有 2 个其他答案
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多