Eu tenho uma tabela no pgsql com nomes (com mais de 1 milhão de linhas), mas também tenho muitas duplicatas. Eu seleciono 3 campos: id
, name
, metadata
.
Quero selecioná-los aleatoriamente com ORDER BY RANDOM()
e LIMIT 1000
, por isso, faço várias etapas para economizar memória no meu script PHP.
Mas como posso fazer isso para que apenas me dê uma lista sem duplicatas nos nomes.
Por exemplo [1,"Michael Fox","2003-03-03,34,M,4545"]
, será retornado, mas não [2,"Michael Fox","1989-02-23,M,5633"]
. O campo de nome é o mais importante e deve ser exclusivo na lista sempre que eu faço a seleção e deve ser aleatório.
Eu tentei com GROUP BY name
, mas espera que eu tenha id e metadados na GROUP BY
função também ou em uma função agregada, mas não quero tê-los de alguma forma filtrados.
Alguém sabe como buscar muitas colunas, mas faz apenas uma distinta em uma coluna?
fonte
order by name
necessário? Produziria um resultado diferente comorder by col1
?name
é necessário. Verifiquedistinct on
no manual.Você quer que a
DISTINCT ON
cláusula .Você não forneceu dados de amostra ou uma consulta completa, por isso não tenho nada para lhe mostrar. Você deseja escrever algo como:
Isso retornará um conjunto de linhas imprevisível (mas não "aleatório"). Se você quiser torná-lo previsível, adicione uma
ORDER BY
resposta por Clodaldo. Se você quiser torná-lo verdadeiramente aleatório, você desejaráORDER BY random()
.fonte
fonte
GROUP BY
cláusula.