2011-07-21 3 views
12

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

par exemple:

obtenir le nombre 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 
+0

Qu'est-ce SGBDR s'il vous plaît? – gbn

Répondre

16

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 
+0

merci un million cela a bien fonctionné. – Tan

0

Vous ne pouvez pas le faire comme une requête unique simple, 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 
) 
+1

Cela ne donnera pas de résultats corrects car il ne répète pas les lignes dans l'ordre COUNT (*) décroissant. Ce n'est pas un * ORDER BY * donc l'ordre est arbitraire. Et il y a 2 autres réponses avec une seule solution de requête – gbn

5

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 
1
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 
3

Cette requête utilise les Group By et et Having clauses pour vous permettre de sélectionner (loc mangé et liste) pour chaque enregistrement en double. La clause As est une commodité pour faire référence à Quantity dans les clauses select et Order By, mais ne fait pas vraiment partie de vous obtenir les lignes en double.

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