PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql SELECT произволен с уникална стойност

Може ли въпросът ви да бъде перифразиран като:

„За всеки от десет произволно избрани доставчици намерете една произволно избрана сделка, предлагана от този доставчик“?

Ако е така, това до голяма степен ви казва какво да правите. Имате нужда от два слоя, едно преминаване, за да изберете произволно десет доставчика, след това едно преминаване, за да изберете една произволна сделка за доставчик.

Дадени фиктивни данни:

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;

Ето един, който работи:

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;

... до голяма степен само чрез прилагане на фразата по-горе като SQL. Не знам дали е бързо; схванахте идеята.

Ако горното преформулиране не е правилно, моля, изяснете въпроса си с примерни данни и пример или някои повече подробности във вашето описание.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на UTC часова зона в postgresql в EST (местно време)

  2. Променете колоните на PostgreSQL, използвани в изгледите

  3. Присъединете се към заявка за броене на generate_series() и извлечете нулеви стойности като '0'

  4. Как да картографирате PostgreSQL масив с Hibernate

  5. Rails:Отказано е разрешение на Postgres за създаване на база данни на rake db:create:all