sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql SELECT náhodný s jedinečnou hodnotou

Může být vaše otázka přeformulována jako:

"Najděte pro každého z deseti náhodně vybraných poskytovatelů jednu náhodně vybranou nabídku nabízenou tímto poskytovatelem" ?

Pokud ano, v podstatě vám to říká, co máte dělat. Potřebujete dvě vrstvy, jeden průchod pro náhodný výběr deseti poskytovatelů, potom jeden průchod pro výběr jedné náhodné nabídky na poskytovatele.

Daná fiktivní 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;

Zde je jeden, který funguje:

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;

... v podstatě jen implementací výše uvedeného frázování jako SQL. Nevím, jestli je to rychlé; máte nápad.

Pokud výše uvedené přeformulování není správné, objasněte prosím svou otázku ukázkovými údaji a příkladem nebo podrobněji v popisu.



  1. Funkce INSTR() v Oracle

  2. Vložte data ze sloupce tabulky a uložte do sloupce jiné tabulky

  3. Jak funguje Unicode() v SQLite

  4. CREATE TABLE as SELECT - pomocí MEMORY ENGINE (v paměti RAM)