SQL задача: найти записи, в которых значение столбца встречается по крайней мере N раз
В данном посте рассмотрим варианты решения SQL задачи: найти записи, в которых значение столбца встречается по крайней мере N раз.
Для решения задачи будем использовать GROUP BY и HAVING в трех различных вариантах: EXISTS, JOIN, IN. Для примера будем использовать простую таблицу Names:
CREATE TABLE Names(
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
Будем искать записи в таблицы Names где одинаковые значения столбца name встречаются более 3 раз.
Решение с помощью EXISTS. По моим замерам выполняющееся с наибольшей скоростью.
SELECT a.*
FROM Names a
WHERE EXISTS (SELECT NULL
FROM Names c
WHERE c.name = a.name
GROUP BY c.name
HAVING COUNT(*) > 3);
Решение с помощью JOIN. По моим замерам выполняющееся с меньшей скоростью, чем решение с EXISTS.
SELECT a.*
FROM Names a
JOIN (SELECT c.name
FROM Names c
GROUP BY c.name
HAVING COUNT(*) > 3) b ON b.name = a.name;
Решение с помощью IN. По моим замерам выполняющееся с наименьшей скоростью.
SELECT a.*
FROM Names a
WHERE a.name IN
(SELECT b.name FROM Names b
GROUP BY b.name HAVING COUNT(*) > 3);
Комментарии
Отправить комментарий