Запрос SQL server с top и group by

#sql #sql-server-2012

#sql #sql-server-2012

Вопрос:

Дана таблица следующей структуры:

идентификатор подписчика, группа

11,1

12,1

13,1

21,2

22,2

23,2

24,2

n1, n

n2, n

n3, n

nm, n

Я хочу получить подгруппу размером n% подписчиков из каждой группы. За 10% я должен получить 10% от группы 1, 10% от группы 2… 10% от группы n.

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

1. Вы пытаетесь выполнить как один оператор или в пакете SQL? Также это помогает?

2. можете ли вы проверить приведенный ниже код и вернуться, если он в порядке или нет

Ответ №1:

Похоже, вам нужен стратифицированный образец. Вы можете получить это, сначала перечислив внутри каждой группы, а затем выбрав нужные «n» записей. Вот пример того, как это сделать в SQL Server:

 select t.id, t.band
from (select t.*,
             row_number() over (order by band_seqnum) as seqnum
      from (select t.*,
                   row_number() over (partition by band order by rand(checksum()) as band_seqnum,
                   count(*) over () as cnt
            from t
           ) t
     ) t
where band_seqnum <= 0.10 * cnt;
  

Ответ №2:

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

 Select * from 
(
Select *, NTILE(n%) over(partition by id order by id) 'R' from t)t
where t.R<=(n%)