Câu hỏi của bạn có thể được diễn đạt lại thành:
"Đối với mỗi trong số mười nhà cung cấp được chọn ngẫu nhiên, hãy tìm một giao dịch được chọn ngẫu nhiên do nhà cung cấp đó cung cấp"?
Nếu vậy, điều đó cho bạn biết phải làm gì. Bạn cần hai lớp, một thẻ để chọn ngẫu nhiên mười nhà cung cấp, sau đó một thẻ để chọn một giao dịch ngẫu nhiên cho mỗi nhà cung cấp.
Đã cung cấp dữ liệu giả:
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;
Đây là một trong những hoạt động:
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;
... khá nhiều chỉ bằng cách triển khai cụm từ ở trên dưới dạng SQL. Không biết có nhanh không; bạn có ý tưởng.
Nếu cách diễn đạt lại ở trên không chính xác, vui lòng làm rõ câu hỏi của bạn bằng dữ liệu mẫu và ví dụ hoặc một số chi tiết khác trong mô tả của bạn.