PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgresql SELECT aleatório com valor único


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.