Используя sql, как получить строки с количеством дубликатов? - PullRequest
1 голос
/ 03 февраля 2012

Как подсчитать дубликаты строк (где дата и имена совпадают) с помощью оператора select?

Вот моя таблица

id  date        name
1   01/02/12    sam  
2   01/02/12    john  
3   02/04/12    eddie  
4   01/06/12    joe 
5   01/02/12    john  
6   01/02/12    john
7   02/04/12    eddie
8   01/05/12    eddie
9   01/07/12    joe 

Результат должен выглядеть следующим образом:

id  date        name   count
1   01/02/12    sam    1
    01/02/12    john   3
    02/04/12    eddie  2
4   01/06/12    joe    1
8   01/05/12    eddie  1
9   01/07/12    joe    1

Мне нужен третий столбец в наборе результатов, значением которого будет столбец count.Кроме того, мне не нужен идентификатор, если счет больше 1 (я думаю, что это было бы невозможно в любом случае).Я использую mysql.

Спасибо за совет.

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Вы можете написать:

SELECT MIN(id) AS id, date, name, COUNT(1) AS `count`
  FROM table_name
 WHERE ...
 GROUP BY date, name
;

Это всегда даст наименьшее id из группы.Если вы специально хотите , чтобы первое поле было NULL при наличии дубликатов, то вы можете изменить MIN(id) на CASE WHEN COUNT(1) > 1 THEN NULL ELSE MIN(id) END, но, похоже, вас это не волнует?

0 голосов
/ 03 февраля 2012
select date, name, count(id) as counter
from mytable
group by date, name
having count(id) > 1
0 голосов
/ 03 февраля 2012

как то так:

select  id, date, name, count(*)
from mytable
group by id, date, name
having count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...