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

Postgresql SELECT tilfældig med unik værdi

Kan dit spørgsmål omformuleres som:

"For hver af ti tilfældigt udvalgte udbydere, find en tilfældigt udvalgt aftale, der tilbydes af den pågældende udbyder" ?

Hvis det er tilfældet, fortæller det dig ret meget, hvad du skal gøre. Du skal bruge to lag, et pas for at vælge ti udbydere tilfældigt, og derefter et pas for at vælge en tilfældig aftale pr. udbyder.

Givet dummy data:

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;

Her er en, der virker:

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;

... stort set bare ved at implementere ovenstående frasering som SQL. Ved ikke om det er hurtigt; du forstår.

Hvis ovenstående omformulering ikke er korrekt, bedes du præcisere dit spørgsmål med eksempeldata og et eksempel eller nogle flere detaljer i din beskrivelse.



  1. Problemer med GROUP_CONCAT og Longtext i MySQL

  2. SqlAlchemy TIMESTAMP 'ved opdatering' ekstra

  3. hvordan gemmer man parset xml-fil til en SQLite-database i Android?

  4. MySQL Highscores - Brugerens personlige rangeringer:Duplikerede poster, der forårsager forkerte værdier