Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 MAX по COUNTу  [new]
Максим Каунтов
Guest
Здравствуйте!
Вопрос: можно ли как-то за один заход получить значение, максимальное число раз входящее в выборку? Например, имеем выборку

4
4
4
4
4
4
4
36
36
36
36
4
4
4
5
5
5

на выходе должны получить: 4.
В два приседания понятно, что надо сначала группировать (COUNT), потом брать максимальный COUNT. А за одно приседание можно?
28 сен 17, 09:41    [20828253]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Добрый Э - Эх
Guest
Максим Каунтов,

так и напиши: ..... max(count()) .... ..... group by <имя поля>
28 сен 17, 09:43    [20828256]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Добрый Э - Эх
Guest
Максим Каунтов,

а, тебе немного другое надо....
тогда row_number.
28 сен 17, 09:48    [20828272]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
Добрый Э - Эх
Максим Каунтов,

а, тебе немного другое надо....
тогда row_number.

Ты хотел сказать keep?
28 сен 17, 09:50    [20828280]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
фирст
Guest
Максим Каунтов
за один заход
А не за один это как, два запроса?
28 сен 17, 09:50    [20828281]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх,

или через keep dense_rank first | last
28 сен 17, 09:51    [20828282]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Elic
Member

Откуда:
Сообщений: 29990
SQL> select max(owner) keep (dense_rank first order by count(*) desc) from all_objects group by owner;

MAX(OWNER)KEEP(DENSE_RANKFIRST
------------------------------
SYS
28 сен 17, 09:52    [20828284]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Добрый Э - Эх
Guest
Максим Каунтов,

with t as (
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 3 as num from dual union all
select 3 as num from dual union all
select 3 as num from dual union all
select 3 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 4 as num from dual union all
select 5 as num from dual union all
select 5 as num from dual union all
select 5 as num from dual)
--
--
select max(count(num)) max_cnt
     , max(num) keep(dense_rank first order by count(1) desc) x_num from t
 group by num
28 сен 17, 09:52    [20828287]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Максим Каунтов
получить значение, максимальное число раз входящее в выборку? Например, имеем выборку

4
4
36
36
5


А в таком варианте, что надо получить?
28 сен 17, 09:53    [20828291]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Максим Каунтов
Guest
Elic
SQL> select max(owner) keep (dense_rank first order by count(*) desc) from all_objects group by owner;

MAX(OWNER)KEEP(DENSE_RANKFIRST
------------------------------
SYS


Большое спасибо, идеальный вариант) Моя темнота не позволила count() во фразу order by сунуть.
28 сен 17, 09:57    [20828305]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Cheeses Crust
Guest
Максим Каунтов,

Примените аналитическую функцию count(столбец) over (partition by столбец) и вы получите второй столбец со значением "сколько вхождений заданного числа во всей выборке". Далее разберётесь сами
28 сен 17, 10:01    [20828314]     Ответить | Цитировать Сообщить модератору
 Re: MAX по COUNTу  [new]
Максим Каунтов
Guest
Сергей Арсеньев
Максим Каунтов
получить значение, максимальное число раз входящее в выборку? Например, имеем выборку

4
4
36
36
5


А в таком варианте, что надо получить?

В моем случае большой важности нет, можно и 36. Ответ я получил - max(id) keep (dense_rank last order by count(*))
Большое спасибо, топик можно закрывать)
28 сен 17, 10:01    [20828316]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить