2008-08-06 2 views
17

Если у меня есть данные, как это:SQL-запрос, подсчитывать и группа по

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

Что такое SQL-запрос, чтобы вернуть записи, где Name повторяется 2 раза или больше?

Так что результат я хочу

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

ответ

35

Не может быть проще ...

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

Это также может быть расширен для удаления дубликатов:

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

Для удаления вы должны оставить только Min (ключ) и удалить другие записи. Запрос должен быть изменен как «... где Key NOT IN (выберите Min (Key) ...» – aartist 2012-04-14 06:23:49

3

Это также может быть достигнуто путем соединения таблицы с самим собой,

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 
Смежные вопросы