Vă mulțumim pentru susținere

Interogare SQL, număr și grup de către

Dacă am date de genul:

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

Ce este interogarea SQL pentru a aduce înapoi înregistrările unde se repetă Name de 2 sau mai multe ori?

Deci, rezultatul pe care aș vrea-o este

 +---+
 |Tom|
 +---+
 |Dan|
 +---+
0
adăugat editat

3 răspunsuri

Nu ar fi mai simplu ...

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

Acest lucru ar putea fi extins și pentru a șterge duplicatele:

Delete
From
Table
Where
Key In (
    Select
    Max(Key)
    From
    Table
    Group By
    Name
    Having
Count(Name) > 1)
0
adăugat
Pentru a șterge, trebuie să lăsați doar Min (tasta) și să ștergeți alte intrări. Interogarea ar trebui modificată ca "... în cazul în care nu este nevoie de cheie (selectați Min (cheie) ...."
adăugat autor aartist
select name from table group by name having count(name) > 1
0
adăugat

Acest lucru ar putea fi realizat și prin aderarea la masă cu ea însăși,

SELECT DISTINCT t1.name
FROM    tbl t1
        INNER JOIN tbl t2
        ON      t1.name = t2.name
WHERE   t1.key         != t2.key;
0
adăugat