|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |