Comment puis-je sélectionner des lignes aléatoires à partir d'une table SQL à l'aide de CockroachDB? Par exemple, si j'ai un certain nombre de questions et que je veux générer une séquence différente chaque fois qu'un étudiant les charge.Renvoyer des lignes aléatoires à partir de SELECT dans CockroachDB
Répondre
CockroachDB n'offre pas encore un moyen efficace de le faire! Pour une manière non-efficace, vous pouvez utiliser SELECT ... FROM ... ORDER BY random() LIMIT 1;
Alternativement, vous pouvez manipuler les résultats d'une instruction SELECT
dans votre application elle-même. Après avoir placé les résultats dans un tableau (ou toute autre structure de type agrégat), vous pouvez également mélanger l'ordre là-bas.
Pour une manière plus efficace, vous pouvez ajouter une colonne entière randomid
à chaque ligne. Lors de l'insertion mettre un nombre aléatoire dans cette colonne. Ensuite, vous pouvez récupérer une colonne aléatoire:
SELECT ... FROM ... WHERE randomid >= ? ORDER BY randomid LIMIT 1;
où? est un nombre aléatoire.
Notez que vous aurez besoin de stockage supplémentaire pour le nombre aléatoire et que vous devez indexer la colonne randomid
.
Notez également que vous devrez peut-être exécuter cette requête deux fois (> = et <) pour vous assurer d'obtenir un résultat. Bien que la probabilité de suppression sur la première requête devrait être très faible.