PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql SELECT losowy z unikalną wartością

Czy Twoje pytanie może zostać przeformułowane jako:

„Dla każdego z dziesięciu losowo wybranych dostawców znajdź jedną losowo wybraną ofertę oferowaną przez tego dostawcę”?

Jeśli tak, to właściwie mówi ci, co robić. Potrzebujesz dwóch warstw, jednej przepustki, aby losowo wybrać dziesięciu dostawców, a następnie jednej przepustki, aby wybrać jedną losową ofertę na dostawcę.

Podane dane fikcyjne:

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;

Oto jeden, który działa:

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;

... po prostu przez zaimplementowanie powyższego wyrażenia jako SQL. Nie wiem, czy to szybko; masz pomysł.

Jeśli powyższe sformułowanie nie jest poprawne, wyjaśnij swoje pytanie, podając przykładowe dane i przykład lub bardziej szczegółowe informacje w opisie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku nie migruje modeli w Django

  2. Jak przekonwertować db w postgreSQL na utf8?

  3. Muszę przypisać wszystkie działania w SQL do jednego identyfikatora, ale obecnie każde działanie ma trzy identyfikatory

  4. FUNKCJA DROP bez znajomości liczby/rodzaju parametrów?

  5. Wybierz losowy wiersz dla każdej grupy