Фильтровать дубликаты из результата MySQL в зависимости от значения столбца - PullRequest
0 голосов
/ 29 сентября 2011

У меня возникли некоторые проблемы при разработке способа возврата нужных строк из следующей таблицы mysql:

first_name      last_name      collection
==========================================
   Bob            Jones            1
   Ted            Jones            1
   Bob            Jones            1
   Bob            Jones            2
   Ted            Baker            2

Я хочу вернуть количество имен на основе столбцов 'first_name' и 'last_name'. Обычно это был бы простой случай использования 'group by first_name, last_name', поэтому мы получили бы следующий результат: счет 3 для Боба Джонса, 1 для Теда Джонса и 1 для Теда Бейкера.

Однако трудность заключается в третьем столбце «коллекция». Мне нужно исключить дубликаты имен между коллекциями, но не внутри коллекций. Таким образом, мы включили бы все имена в число для первой коллекции, но включали бы имена только в число из второй коллекции, если они НЕ встречаются в первой коллекции.

Итак, желаемый результат будет следующим: счет 2 для Боба Джонса, 1 для Теда Джонса и 1 для Теда Бейкера.

first_name      last_name      collection             included?
==========================================         ===============
   Bob            Jones            1                    Yes
   Ted            Jones            1                    Yes
   Bob            Jones            1                    Yes
   Bob            Jones            2                    No
   Ted            Baker            2                    Yes

Я действительно пытался обдумать это, но у меня заканчиваются идеи. Любая помощь будет высоко ценится ... спасибо!

Ответы [ 2 ]

0 голосов
/ 10 апреля 2013

Это то, что вы ожидаете?

SELECT u1.first_name, u1.last_name, u1.collection FROM users u1 
WHERE u1.collection = (SELECT min(u2.collection) 
    FROM users u2 WHERE u1.first_name = u2.first_name
    AND u1.last_name = u2.last_name);

http://www.sqlfiddle.com/#!2/bd086/7

0 голосов
/ 29 сентября 2011

Возможно

SELECT first_name, last_name, COUNT( DISTINCT collection) AS cnt
FROM yourtable
GROUP BY first_name, last_name

COUNT DISTINCT удалит дубликаты записей Bob / Jones / 1.

...