Выберите полную строку для значения режима статистики - PullRequest
0 голосов
/ 19 июня 2019

У меня есть таблица, как показано ниже -

id cola colb colc
1  45   ab    cd
1  45   ef    cd 
1  50   ab    av
2  20   cd    sc
2  13   cd    cd
2  20   as    sd

Сначала я хочу получить значение режима статистики раздела колы по идентификатору. В этом случае его 45 для 1 и 20 для 2, а затем выберите полную строку выбранного значения stats_mode. Есть ли способ сделать это в одном SQL вместо создания встроенных запросов?

Ожидаемый результат: -

id cola colb colc
1  45   ab    cd
2  20   as    sd

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

есть ли способ сделать это в одном sql вместо создания встроенных запросов?

Нет, вам нужны подзапросы для выполнения операций с данными такого типа.

0 голосов
/ 19 июня 2019

Статистический режим является наиболее часто встречающимся значением. Вы можете сделать это с помощью оконных функций:

select t.*
from (select t.*,
             row_number() over (partition by id order by cnt desc) as seqnum_mode
      from (select t.*,
                   count(*) over (partition by id, cola) as cnt
            from t
           ) t
     ) t
where seqnum_mode = 1;
0 голосов
/ 19 июня 2019

Вы можете попробовать использовать какой-нибудь подзапрос

select m2.* from my_table m2 
inner join (
  select  min(m1.colb) min_colb, t1.cola, t1.id
  from  my_table m1
  inner join  (
    select cola, id 
    from  my_table 
    group by cola,id  
    having count(*)>1 
  ) t1 on t1.cola = m1.cola and t1.id = m1.id 
) t2 on t2.cola = m2.cola and t2.id = m2.id and t2.min_colb = m2.colb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...