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