Sua pergunta pode ser reformulada como:
"Para cada um dos dez fornecedores selecionados aleatoriamente, encontre uma oferta selecionada aleatoriamente oferecida por esse fornecedor" ?
Se assim for, isso praticamente lhe diz o que fazer. Você precisa de duas camadas, uma passagem para selecionar aleatoriamente dez provedores e, em seguida, uma passagem para selecionar um negócio aleatório por provedor.
Dados fictícios:
create table spam ( deal text, provider text );
insert into spam(deal,provider)
SELECT prov_id||n::text, prov_id FROM (
SELECT chr(x) AS prov_id from generate_series(97, 92+26) x) y
CROSS JOIN generate_series(1,10) n;
select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10;
Aqui está um que funciona:
SELECT
(SELECT deal FROM spam WHERE spam.provider = sel_prov.provider ORDER BY random() LIMIT 1),
sel_prov.provider
FROM (select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10) sel_prov;
... praticamente apenas implementando o fraseado acima como SQL. Não sei se é rápido; Você entendeu a ideia.
Se a reformulação acima não estiver correta, esclareça sua pergunta com dados de amostra e um exemplo ou mais detalhes em sua descrição.