#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)))
)