Имя: Пароль:
IT
 
SQL запрос выбрать элементы чаще повторяющиеся
0 Coldboy
 
16.05.13
14:59
Здравствуйте. Никто не подскажет, есть таблица с кучей кучей строчек, в которых есть один инфикатор, мне нужно выбрать список этих id, которые чаще всего повторяются в таблице, и сортировать по количество повторений ( в порядке убывания, начиная с наибольшего количества повторений).
1 viktor_vv
 
16.05.13
15:03
Select
 b.ID,
 b.c
From
(Select
  id ,
  Count() as c
From
 T
Group by
    id
) as b
Order by
    b.c desc, b.ID
2 andreymongol82
 
16.05.13
15:04
есть еще волшебное слово having
3 viktor_vv
 
16.05.13
15:06
(2) Можно и его, если ТС нужен порог, с какого количества повторений отбирать.
4 viktor_vv
 
16.05.13
15:07
(3)+ В "которые чаще всего повторяются" он вроде намекнул на это.
5 Coldboy
 
16.05.13
15:07
все сделал
SELECT vod_id, count(vod_id) as test  FROM `my_tables` group by vod_id order by test desc limit 40
6 Coldboy
 
16.05.13
15:08
(1) спасибо
(2) а че за having?
7 Goggy
 
16.05.13
15:09
я затупил на слове "инфикатор" хД
8 viktor_vv
 
16.05.13
15:10
(6) Это отобрать по условию
SELECT vod_id, count(vod_id) as test  FROM `my_tables` group by vod_id having count(vod_id)>2 order by test desc limit 40

отберутся строки с более чем два повторения.
9 andreymongol82
 
16.05.13
15:12
(6) После group by задается. Означает какие группировки отбирать.
(4) Ага, множественное число "которые", как-то обычно и подразумевает порог, вот если бы был "который", тогда выбрать группировку с количеством по максимуму и все
10 viktor_vv
 
16.05.13
15:14
(9) Обычно еще и критерий порога задают :), поэтому и смутило.
11 viktor_vv
 
16.05.13
15:15
(8)+ Задает условие по значению агрегатной функции.
12 Coldboy
 
16.05.13
15:23
ну понятно. мне можно без Having я тупо беру топ 40 популярных и все :)
13 Coldboy
 
16.05.13
15:36
не хочу открывать новую тему, еще усложним задачу, хочется взять из другой таблицы еще описание по этому id. запрос сделал такой
SELECT stat.vod_id, count(stat.vod_id) as test, (SELECT film.id, film.name_ru, film.price, film.year, film.cover_big  FROM vod_asset film where film.id = stat.vod_id) FROM vod_asset_stats stat group by stat.vod_id  order by test desc limit 40

но выдает ошибку Operand should contain 1 column(s)
14 Coldboy
 
16.05.13
15:41
есть еще мысли?
15 viktor_vv
 
16.05.13
15:44
(14) В подзапросе в selecte одно поле выбирай. Или как в (1) с левым соединением.
16 viktor_vv
 
16.05.13
15:45
(15) Или в этом же не подзапросом, а тоже левым соединением, плюс в group by добавишь поля, которые в Select вытащишь.
17 Coldboy
 
16.05.13
15:48
(15) уже понял, что 1 надо. а с левым соединенм это как?
18 Coldboy
 
16.05.13
16:05
(16) спасибо за подсказку все сделал.
SELECT film.id, film.name_ru, film.price, film.year, film.cover_big, stat.vod_id FROM vod_asset film, (SELECT vod_id, count(vod_id) as test FROM  vod_asset_stats  group by vod_id  order by test desc limit 40) as stat  where film.id = stat.vod_id
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший