J'ai une table sur pgsql avec des noms (ayant plus de 1 million de lignes), mais j'ai aussi de nombreux doublons. Je sélectionne 3 champs: id
, name
, metadata
.
Je veux les sélectionner au hasard avec ORDER BY RANDOM()
et LIMIT 1000
, donc je fais cela de nombreuses étapes pour économiser de la mémoire dans mon script PHP.
Mais comment puis-je faire cela pour qu'il ne me donne qu'une liste sans doublons dans les noms.
Par exemple [1,"Michael Fox","2003-03-03,34,M,4545"]
sera retourné mais pas [2,"Michael Fox","1989-02-23,M,5633"]
. Le champ de nom est le plus important et doit être unique dans la liste à chaque fois que je fais la sélection et il doit être aléatoire.
J'ai essayé avec GROUP BY name
, mais il s'attend à ce que j'aie également un identifiant et des métadonnées dans la GROUP BY
fonction ou dans une fonction agrégée, mais je ne veux pas les filtrer d'une manière ou d'une autre.
Tout le monde sait comment récupérer plusieurs colonnes mais n'en fait qu'une seule sur une colonne?
la source
order by name
nécessaire? Cela produirait-il un résultat différent avecorder by col1
?name
est nécessaire. Consultezdistinct on
le manuel.Vous voulez la
DISTINCT ON
clause .Vous n'avez pas fourni d'exemples de données ni de requête complète, je n'ai donc rien à vous montrer. Vous voulez écrire quelque chose comme:
Cela renverra un ensemble de lignes imprévisible (mais pas «aléatoire»). Si vous voulez le rendre prévisible, ajoutez une
ORDER BY
réponse par Clodaldo. Si vous voulez le rendre vraiment aléatoire, vous le voudrezORDER BY random()
.la source
la source
GROUP BY
clause.