Выборка строк при их количестве больше n.

WoLFiks

Не курю...
Выборка строк при их количестве больше n.

Есть таблица, id | name | param (id- НЕ key, т.е. не автоинкремент и может дублироваться)

Допустим есть записи у которых:
id=7;name='a' - 10 записай.
id=3;name='a'- 3 записи.
id=3;name='b' - 15 записей.
id=7;name='c' - 2 записи.
Необходимо выбрать все, общее количество которых в таблице больше, например 5.
Т.е. при приведенных параметрах в выборку должны попасть
10 записей у которых name='a' и id=7
15 - у которых name='b', а записи, name='a';Id='3' и name='c' непопасть.

Как получить число их я знаю.
Например так - SELECT COUNT(DISTINCT id) AS col FROM `t1` GROUP BY name
.. а что дальше???
 

zerkms

TDD infected
Команда форума
вложенный запрос, который выбирает id и name всех записей, которых больше 5
внешний - по WHERE (`id`, `name`) IN (вложенный)
 

WoLFiks

Не курю...
Вот родил я что-то подобное:

SELECT * FROM `t1`,
(
SELECT name, COUNT(DISTINCT id) AS ct
FROM `t1`
GROUP BY name
) AS t2
WHERE t2.ct >5 AND t1.name= t2.name

По логике правильно.
Т.е. извлекаем сначала подзапросом количество строк уникальных пар, а потом удовлетворяющие по `name` строки, если их в общем больше 5ти штук.

Вроде так, ждем критики! ))
 

Gas

может по одной?
WoLFiks
Лучше добавь во вложенный запрос HAVING, как и сказал zerkms, а из внешнего убери проверку t2.ct >5
 

zerkms

TDD infected
Команда форума
Gas
да и наверное GROUP BY по двум полям будет эффективнее связки GROUP BY + DISTINCT
 
Сверху