2008-08-06 15 views
17

tarafından saymak ve grubu:SQL sorgusu, böyle veriler varsa

+---+----+ 
|Key|Name| 
+---+----+ 
|1 |Dan | 
+---+----+ 
|2 |Tom | 
+---+----+ 
|3 |Jon | 
+---+----+ 
|4 |Tom | 
+---+----+ 
|5 |Sam | 
+---+----+ 
|6 |Dan | 
+---+----+ 

Name 2 veya daha fazla kez tekrarlanır kayıtları geri getirmek için SQL sorgusu nedir?

Yani istediğiniz sonuç olduğundan

+---+ 
|Tom| 
+---+ 
|Dan| 
+---+ 

cevap

35

Select 
Name, 
Count(Name) As Count 
From 
Table 
Group By 
Name 
Having 
Count(Name) > 1 
Order By 
Count(Name) Desc 

Bu

, yinelemeleri silmek için uzun olabilir ... daha basit olamazdı:

Delete 
From 
Table 
Where 
Key In (
    Select 
    Max(Key) 
    From 
    Table 
    Group By 
    Name 
    Having 
Count(Name) > 1) 
+0

Silmek için, yalnızca Min (anahtar) ve diğer girişleri silmeniz gerekir. Sorgu "... anahtar IN IN (Min (Anahtar) 'ı seçin ..." olarak değiştirilmelidir. – aartist

3

Bu ayrıca tabloya kendi başına katılarak da yapılabilirdi,

SELECT DISTINCT t1.name 
FROM tbl t1 
     INNER JOIN tbl t2 
     ON  t1.name = t2.name 
WHERE t1.key   != t2.key; 
4
select name from table group by name having count(name) > 1