[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выборка в mysql
z3rg
Подскажите пожалуйста как создать сложный запрос чтобы он выводил все уникальные ячейки А где в ячейке Б больше 20 записей



Спустя 8 минут, 42 секунды (10.12.2009 - 23:08) Romms написал(а):
чото я непонял вопрос... какие ячейки?
Цитата
где в ячейке Б больше 20 записей


Спустя 1 час, 35 минут, 30 секунд (11.12.2009 - 00:44) z3rg написал(а):
тоесть есть таблица в ней 2 столбца А и Б, в А идут к примеру категории, в Б ссылки, и вот нужно вывести все категории где ссылок больше 20.

пример:
категория1 ссылка1
категория1 ссылка2
...
категория1 ссылка20

и вот если таких записей больше 20 нужно вывести категория1
на пхп 2-мя запросами это можно сделать так сначала сгрупировать по категории а потом подсчитывать число записей с названием категории и если больше 20 то вывести, а вот как 1 запросом это зделать? чет мучу и нифина

Спустя 45 минут, 17 секунд (11.12.2009 - 01:29) sergeiss написал(а):
Вот так примерно (проверил в Постгре, но в MySQL тоже должно работать):

select * from table1 t1
where (select count(*) as c from table1 t2 where t1.column_a=t2.column_a) > 20


Словами объяснить сей запрос можно, но попробуй это сделать самостоятельно, для своей же собственной пользы. smile.gif

По сути, рассматриваем одну и ту же таблицу дважды, как 2 разные таблицы. Никто и ничто не мешает нам это делать. Но для различия таблиц даем им разные синонимы (алиасы).

Спустя 2 часа, 21 минута, 48 секунд (11.12.2009 - 03:51) z3rg написал(а):
sergeiss, мега респект, както даже и не подумал что так можно, только наверное нужно в конце после
... 20 group by column_a

а то повторятся будет результат

sergeiss, спасибо большое, суть уловил.

Спустя 5 часов, 4 минуты, 41 секунда (11.12.2009 - 08:56) sergeiss написал(а):
Цитата (z3rg @ 11.12.2009 - 04:51)
а то повторятся будет результат

Можно и так - сам смотри, согласно тому, что тебе нужно получить. В "моем" запросе получишь все строки, количество которых по определенному критерию больше 20, а в "твоем" запросе - по одному экземпляру строки из тех, которых больше 20. Только надо указать в выборке не все, а определенные колонки.
Но и без group by результат не будет повторяться! Будут выбраны именно разные строки, соответствующие определенным критериям.

Спустя 9 часов, 29 минут, 8 секунд (11.12.2009 - 18:25) z3rg написал(а):
Спасибо за ответ, а вот 2 запроса с груп бу и дистинкт, по идее с групбай должно выполнятся быстрее если большая база а с дистинкт если маленькая ?
select t1.cat from links_new t1
where (select count(*) from links_new t2 where t2.cat=t1.cat) > 20 group by t1.cat limit 10


select DISTINCT t1.cat from links_new t1
where (select count(*) from links_new t2 where t2.cat=t1.cat) > 20 limit 10


ps с group by У меня почемуто база виснет, если выполнить по отдельности то совокупно меньше 10 сек

Спустя 4 часа, 29 минут, 1 секунда (11.12.2009 - 22:54) sergeiss написал(а):
Насчет скорости ничего не могу сказать.

Спустя 10 часов, 43 минуты, 26 секунд (12.12.2009 - 09:37) glock18 написал(а):
Цитата
Спасибо за ответ, а вот 2 запроса с груп бу и дистинкт, по идее с групбай должно выполнятся быстрее если большая база а с дистинкт если маленькая

совершенно ни на чем не обоснованное заявление. посмотри explain и сразу станет понятно, что именно тормозит. возможно даже получится исправить это.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.