PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql SELECT casuale con valore univoco

La tua domanda può essere riformulata come:

"Per ciascuno dei dieci fornitori selezionati casualmente, trova un'offerta selezionata casualmente offerta da quel fornitore"?

Se è così, questo ti dice praticamente cosa fare. Hai bisogno di due livelli, un pass per selezionare casualmente dieci fornitori, quindi un pass per selezionare un affare casuale per fornitore.

Dati fittizi dati:

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;

Eccone uno che funziona:

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 semplicemente implementando la frase sopra come SQL. Non so se è veloce; ti viene l'idea.

Se la riformulazione di cui sopra non è corretta, chiarisci la tua domanda con dati di esempio e un esempio, o qualche dettaglio in più nella tua descrizione.