PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Eu preciso de uma função para selecionar 88 linhas aleatórias de uma tabela (sem duplicatas)


Aqui está uma solução rápida que você pode gostar:
CREATE EXTENSION IF NOT EXISTS tsm_system_rows;

     select * from task 
tablesample system_rows (88);

Para referência, TABLESAMPLE está nos documentos para SELECT:https://www. postgresql.org/docs/current/sql-select.html

Aqui está uma boa descrição do recurso:

https://www.2ndquadrant.com/ pt/blog/tablesample-in-postgresql-9-5-2/

...e outro artigo sobre o tema geral da amostragem aleatória do mesmo autor:

https://www. 2ndquadrant.com/en/blog/tablesample-and-other-methods-for-getting-random-tuples/

tsm_system_rows é uma das duas extensões de amostragem padrão, documentadas aqui:https:/ /www.postgresql.org/docs/current/tsm-system-rows.html

Ei! Fico feliz que você tenha feito essa pergunta. Eu costumo usar o método BERNOULLI, que já vem embutido no SELECT, mas é baseado em uma porcentagem. Acabei de testar isso e funciona bem:
select * from task 
tablesample BERNOULLI (1)
limit 88