Ваш лучший выбор, вероятно, состоит в том, чтобы просто разделить клиентов на четыре рандомизированные группы. С числами, о которых вы говорите, значения будут довольно близки:
select t.*,
ntile(4) over (order by newid()) as grp
from t;
Более канонический ответ - сделать стратифицированную выборку. В общем, это очень хорошо сработает:
select t.*,
(row_number() over (order by revenue) % 4) as grp
from t;
Это не идеально. Тем не менее, нет идеального ответа на ваш вопрос. В конце концов, один клиент может получать половину дохода, что делает невозможным ответить на ваш вопрос с помощью бункеров одинакового размера и с одинаковым доходом.
Метод стратификации действительно может быть уточнен для непрерывных значений. Идея состоит в том, чтобы разбить клиентов на n / 4 корзины на основе выручки, а затем выбрать случайным образом в каждой группе:
select t.*,
(row_number() over (partition by bin order by newid()) % 4 as grp
from (select t.*,
(row_number() over (order by revenue) / 4) as bins
from t
) t;