Группировка на основе наиболее распространенного значения

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня возникли проблемы с попыткой сгруппировать на основе наиболее распространенного значения. Данные, которые у меня есть, это:

 ID  Name
327 TypeA
327 TypeA
327 TypeA
327 TypeB
327 TypeB
327 TypeB
327 TypeB
  

В этом случае я бы хотел выбрать ID и имя «TypeB», поскольку это наиболее распространенное значение для этого идентификатора. Таким образом, результат будет выглядеть следующим образом:

 ID  Name
327 TypeB
  

Надеюсь, кто-нибудь сможет помочь с этим, спасибо.

Ответ №1:

Это называется mode статистикой in. Вот один из методов:

 select id, name
from (select id, name, count(*) as cnt,
             row_number() over (partition by id order by count(*) desc) as seqnum
      from t
      group by id, name
     ) t
where seqnum = 1;
  

Комментарии:

1. Спасибо, это выводит именно то, что мне нужно. Очень признателен!

Ответ №2:

вот как это сделать, используя group by в подзапросе

 select 
    ID,
    Name 
from 
(
    Select 
        ID,
        Name,
        Count(distinct(Name)) as [Count] 
    from tablename 
    group by 
        ID, 
        Name 
    having Count(distinct(Name)) = MAX(Count(distinct(Name)))
)