Oracle SQL - получить наибольшее вхождение значения, сгруппированного в другое значение - PullRequest
0 голосов
/ 04 октября 2019

Во-первых, я использую ORACLE SQL. Я работаю с таблицей, которая имеет два простых столбца: NBHD и MODEL. Что мне нужно сделать, так это сначала посчитать, сколько раз каждая МОДЕЛЬ используется на NBHD. Тогда мне нужно взять только МОДЕЛЬ с наибольшим количеством на NBHD. Мне удалось подсчитать, сколько раз МОДЕЛЬ используется на NBHD, но я застрял там.

Во-первых, вот код для создания временной таблицы, которая должна представлять данные, которые яИспользую.

create table temp_ctest (NBHD VARCHAR(2), MODEL VARCHAR(2));

insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('2', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'B');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('2', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'B');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('2', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'D');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('2', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('3', 'A');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('1', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'C');
insert into temp_ctest (NBHD, MODEL) VALUES ('4', 'C'); 

Вот код, который я уже использовал, чтобы получить количество раз, сколько каждая МОДЕЛЬ используется на NBHD.

select nbhd, model, count(model) modelcount 
from temp_ctest
group by nbhd, model 
order by nbhd, modelcount desc;

Это извлеклоследующий список:

https://snipboard.io/UZ1x5L.jpg

Я пытался использовать over (partition by), но я все еще довольно плохо знаком с SQL и не могу понять это.

Результаты, которые я надеюсь достичь, являются частью списка выше. Я просто хочу самую высокую модель на NBHD. Для данного набора я хотел бы видеть следующий результат:

https://snipboard.io/HayLoZ.jpg

Любая помощь приветствуется !!

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Вы можете смешивать оконные функции с агрегацией:

select nbhd, model, modelcount
from (select nbhd, model, count(*) as modelcount,
             rank() over (partition by nbhd order by count(*) desc) as seqnm
      from temp_ctest
      group by nbhd, model 
     ) nm
where seqnum = 1
order by nbhd;
0 голосов
/ 04 октября 2019

Попробуйте это:

Select nbhd, model, modelcount 
from
(Select nbhd, model, modelcount, 
        dense_rank() over 
        (partition by nbhd order by modelcount desc) as rn 
from
(select nbhd, model, count(model) modelcount 
from temp_ctest
group by nbhd, model))
Where rn = 1;

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...