あなたの質問は次のように言い換えることができますか:
「ランダムに選択された10のプロバイダーのそれぞれについて、そのプロバイダーが提供するランダムに選択された取引を1つ見つけます」?
もしそうなら、それはあなたに何をすべきかをほとんど教えてくれます。 2つのレイヤーが必要です。1つのパスで10のプロバイダーをランダムに選択し、次に1つのパスでプロバイダーごとに1つのランダムな取引を選択します。
与えられたダミーデータ:
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;
動作するものは次のとおりです:
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;
...上記のフレーズをSQLとして実装するだけです。それが速いかどうかわからない。アイデアが浮かびます。
上記の言い換えが正しくない場合は、サンプルデータと例、または説明の詳細を使用して質問を明確にしてください。