Tengo una tabla en pgsql con nombres (que tiene más de 1 millón de filas), pero también tengo muchos duplicados. Selecciono 3 campos: id
, name
, metadata
.
Quiero seleccionarlos aleatoriamente con ORDER BY RANDOM()
y LIMIT 1000
, así que hago varios pasos para ahorrar algo de memoria en mi script PHP.
Pero, ¿cómo puedo hacer eso para que solo me dé una lista sin duplicados en los nombres?
Por ejemplo [1,"Michael Fox","2003-03-03,34,M,4545"]
, se devolverá pero no [2,"Michael Fox","1989-02-23,M,5633"]
. El campo de nombre es el más importante y debe ser único en la lista cada vez que hago la selección y debe ser aleatorio.
Intenté con GROUP BY name
, pero luego espera que tenga una identificación y metadatos en la GROUP BY
función también o en una función adicional, pero no quiero que se filtren de alguna manera.
¿Alguien sabe cómo obtener muchas columnas pero solo hacer una diferencia en una columna?
fuente
order by name
requerido? ¿Produciría un resultado diferente conorder by col1
?name
es necesario. Consultedistinct on
el manual.Quieres la
DISTINCT ON
cláusula .No proporcionaste datos de muestra o una consulta completa, así que no tengo nada que mostrarte. Quieres escribir algo como:
Esto devolverá un conjunto de filas impredecible (pero no "aleatorio"). Si desea que sea predecible, agregue una
ORDER BY
respuesta de Clodaldo. Si quieres que sea realmente aleatorio, querrás hacerloORDER BY random()
.fuente
fuente
GROUP BY
cláusula.