Найти дубликаты одного столбца, но вернуть результаты только в том случае, если другой столбец имеет такое же значение - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу найти значения данного столбца, которые повторяются (дублируются), но возвращают повторы, только если другой столбец в строке такой же.

Возможно, пример будет более понятным. Имея таблицу с именем filters, у меня есть 3 столбца (id, name, filter_type):

DESCRIBE filters;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255) | YES  |     | NULL    |                |
| filter_type       | varchar(255) | YES  |     | NULL    |                |
| created_at        | datetime     | YES  |     | NULL    |                |
| updated_at        | datetime     | YES  |     | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+

Теперь я хочу выбрать все повторяющиеся типы фильтра. Достаточно просто:

SELECT COUNT(*) as count, filter_type 
FROM filters 
GROUP BY filter_type_type HAVING count > 1; 

+-------+-----------------+
| count | filter_type     |
+-------+-----------------+
|     5 | Contact         |
+-------+-----------------+

Но я хочу вернуть повтор только в том случае, если значения столбца имени одинаковы для всей группы. Таким образом, в результате выше, мы повторили «Контакт». Это повторяется 5 раз. Но я хочу вернуть этот результат, только если все 5 записей имеют одинаковое значение столбца имени.

SELECT name FROM filters WHERE filter_type = 'Contact';
+---------------------------+
| name                      |
+---------------------------+
| All                       |
| All                       |
| New                       |
| All                       |
| New                       |
+---------------------------+

Поскольку значения имен не совпадают для 5 записей, я не хочу возвращать тип фильтра «Контакт». Но если бы они все были одинаковыми, я бы хотел вернуть его.

Я думал использовать подзапросы, но не знал, как их соединить. Как я мог это сделать?

1 Ответ

0 голосов
/ 23 апреля 2019

Для этого можно использовать агрегацию вместе с предложением having:

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