sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql SELECT slumpmässigt med unikt värde

Kan din fråga omformuleras som:

"För var och en av tio slumpmässigt utvalda leverantörer, hitta en slumpmässigt utvald affär som erbjuds av den leverantören" ?

Om så är fallet, talar det ganska mycket om vad du ska göra. Du behöver två lager, ett pass för att slumpmässigt välja tio leverantörer, sedan ett pass för att välja en slumpmässig affär per leverantör.

Givet dummydata:

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;

Här är en som fungerar:

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;

... ganska mycket bara genom att implementera fraseringen ovan som SQL. Vet inte om det är snabbt; du fattar.

Om omformuleringen ovan inte är korrekt, vänligen förtydliga din fråga med exempeldata och ett exempel, eller någon mer detalj i din beskrivning.



  1. Vad är ett effektivt sätt att spåra, identifiera och rapportera varje "felmeddelande" som din ansökan tar upp?

  2. mysql-fråga i en fråga med sekretesskontroll

  3. Problem med MySQL-datumjämförelse

  4. ATAN() Funktion i Oracle