web-dev-qa-db-fra.com

requête SQL pour trouver les enregistrements en double

quelle est la requête sql pour trouver les enregistrements en double et les afficher en ordre décroissant, en fonction du nombre le plus élevé et l'ID afficher les enregistrements.

par exemple:

obtenir le décompte peut être fait avec

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

et le résultat sera comme

title cnt

ravi   10
prabhu  9
srinu   6

maintenant quelle est la requête pour obtenir le résultat comme ci-dessous:

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

Si votre SGBDR prend en charge la clause OVER ...

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

Vous pouvez le faire en une seule requête:

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
6
Charles Bretana

Cette requête utilise le Group By et et Having clauses pour vous permettre de sélectionner (localiser et répertorier) pour chaque enregistrement en double. La clause As est pratique pour faire référence à Quantity dans les select et Order By clauses, mais ne fait pas vraiment partie de l'obtention des lignes en double.

Select
    Title,
    Count( Title ) As [Quantity]
   From
    Training
   Group By
    Title
   Having 
    Count( Title ) > 1
   Order By
    Quantity desc
5
Russ
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
1
Manoj

Vous ne pouvez pas le faire comme une simple requête unique, mais cela ferait:

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