Вам не нужен SELECT DISTICT url, ... когда вы делаете GROUP BY url.
Я бы переписал ваш запрос так:
от
SELECT DISTINCT url,tag,COUNT(tag) as "TagCount" FROM urltag GROUP BY url
до
SELECT url, COUNT(tag) as "TagCount" FROM urltag GROUP BY url
Размещение столбца tag
в предложении select не даст полезных данных. Если столбец не упоминается в предложении GROUP BY, значения, возвращаемые для него, будут случайными, обычно min (tag).
Итак, если вы хотите удалить все строки, содержащие URL-адреса, для которых было связано менее 5 тегов, вы можете сделать это:
Вы можете добавить флаг к вашей таблице, например:
alter table urltag
add column todelete tinyint(4) not null default 0,
add key(todelete);
Тогда вы можете сделать
update urltag u
inner join (
SELECT url, count(tag) tagcount
FROM urltag GROUP BY url
)big on big.url = t.url
set t.todelete = 1
where big.tagcount < 5;
Тогда просто
delete from urltag where todelete = 1;