Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Выборка самых частых значений


Автор: Onis 2.10.2009, 14:34
Для статистики нужно получить из таблицы пять самых часто попадающихся значений одного из её полей. Как это сделать одним запросом?

Автор: DimW 2.10.2009, 14:42
для оракл:
Код

select name
  from (select t.name
              ,count(*) qnt
          from table1 t
         group by t.name
         order by qnt desc)
 where rownum < 6


Автор: Onis 2.10.2009, 14:43
ммм... мне для мускула прокатит?

Автор: DimW 2.10.2009, 14:45
даже так:
Код

select name
  from (select t.name
          from table1 t
         group by t.name
         order by count(*) desc)
 where rownum < 6


Добавлено через 59 секунд
для мускула смотри http://www.google.ru/search?source=ig&hl=ru&rlz=&q=limit+mysql&meta=lr%3D&aq=0&oq=LIMIT

Автор: Zloxa 2.10.2009, 14:47
Цитата(Onis @  2.10.2009,  14:34 Найти цитируемый пост)
пять самых часто попадающихся значений одного из её полей


Код

select поле_со_значением, count(*) cnt
group by поле_со_значением
order by cnt desc
limit 5

Код

select top 5 поле_со_значением, count(*) cnt
group by поле_со_значением
order by cnt desc

Код

select * from (
  select поле_со_значением, count(*) cnt, rownum rn
  group by поле_со_значением
  order by cnt desc
)
where rn <= 5


Автор: DimW 2.10.2009, 14:51
Zloxa, последний пример должен вернуть ерунду т.к. rownum и order by  в одном запросе используются.

Добавлено через 1 минуту и 2 секунды
касательно оракла конечно

Автор: Zloxa 2.10.2009, 15:03
Цитата(DimW @  2.10.2009,  14:51 Найти цитируемый пост)
должен вернуть ерунду 

да, виноват, спасибо
Ваще ужос, что со мной происходит, smile  это же как жы-шы, в первом классе проходят

Автор: Gluttton 2.10.2009, 16:35
Цитата(DimW @  2.10.2009,  14:42 Найти цитируемый пост)
для оракл:

Цитата(Onis @  2.10.2009,  14:43 Найти цитируемый пост)
ммм... мне для мускула прокатит?

http://forum.vingrad.ru/forum/topic-252614/anchor-entry1823208/0.html и будте кросс-платформенны smile ...

Автор: Onis 2.10.2009, 16:58
Так получилось что на том сервере стоит четвертая версия мускула, она не поддерживает встроенные запросы, пришлось написать скрипт который считает статистику. Но всё равно всем спасибо.

Автор: Zloxa 2.10.2009, 17:09
Цитата(Gluttton @  2.10.2009,  16:35 Найти цитируемый пост)
Используйте ANSI-вариант

Я так понимаю оконный row_number() уже тоже ANSI smile
Если не ошибаюсь 2003.

Автор: DimW 5.10.2009, 07:55
Цитата(Gluttton @  2.10.2009,  16:35 Найти цитируемый пост)
Используйте ANSI-вариант и будте кросс-платформенны

да ну нафиг  smile
ИМХО использование особенностей синтаксиса SQL конкретной СУБД это больше плюс для разработчика чем минус.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)