2010-12-01 9 views
2

Pour chaque parent qui existe, je voudrais sélectionner 1 ligne d'enfant au hasard. La structure de la table ressemble à ceci:Comment sélectionner un essai aléatoire avec sql? (Bernoulli Trial)

parent 
    id 

child 
    parent_id 
    id 
    rank 

où il y a 1..n enregistrements enfants pour chaque parent et le rang est unique par parent allant de 1 à N.

La sortie devrait être comme:

parent child rank 
--------+-------+------- 
1  34  7 
2  56  8 
... 

Avec chaque parent produisant une rangée d'enfant. (Cela servira de base pour les essais de Bernoulli.)

(PostgreSQL a une fonction aléatoire() qui donne un nombre compris entre 0 et 1.)

Répondre

1

pas familier du tout avec postgresql, mais peut-être quelque chose comme ça ?

SELECT DISTINCT ON (parent_id) parent_id as "parent", id as "child", rank 
FROM child c 
ORDER BY 
     parent_id, random() 
+0

Beaucoup plus simple que je ne le pensais. Merci. –

Questions connexes