sql >> Database >  >> RDS >> PostgreSQL

Postgresql SELECT willekeurig met unieke waarde

Kan uw vraag worden geherformuleerd als:

"Zoek voor elk van de tien willekeurig geselecteerde providers één willekeurig geselecteerde deal aangeboden door die provider" ?

Als dat zo is, zegt dat ongeveer wat je moet doen. Je hebt twee lagen nodig, één pas om willekeurig tien providers te selecteren en vervolgens één pas om één willekeurige deal per provider te selecteren.

Gegeven dummy-gegevens:

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;

Hier is er een die werkt:

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;

... vrijwel gewoon door de bovenstaande frasering als SQL te implementeren. Weet niet of het snel is; je snapt het idee.

Als de bovenstaande herformulering niet correct is, verduidelijk dan uw vraag met voorbeeldgegevens en een voorbeeld, of wat meer details in uw beschrijving.



  1. Hoe kan ik een query gebruiken met een tijdelijke aanduiding tussen aanhalingstekens? (perl / postgresql)

  2. MYSQL-triggers:JSON_SEARCH een geheel getal in een json-array van gehele getallen

  3. door de gebruiker gedefinieerd type als invoerparameters in de PostgreSQL-functie

  4. Wijzig de AUTO_INCREMENT-waarde door het resultaat te selecteren