Sélectionnez aléatoire ligne pour chaque groupe
J'ai un tableau comme celui-ci
ID ATTRIBUTE
1 A
1 A
1 B
1 C
2 B
2 C
2 C
3 A
3 B
3 C
J'aimerais sélectionnez juste un aléatoire attribut pour chaque ID. Le résultat pourrait donc ressembler à ceci (même si c'est juste une des nombreuses options de
ATTRIBUTE
B
C
C
C'est une tentative de ma part sur ce problème
SELECT
"ATTRIBUTE"
FROM
(
SELECT
"ID",
"ATTRIBUTE",
row_number() OVER (PARTITION BY "ID" ORDER BY random()) rownum
FROM
table
) shuffled
WHERE
rownum = 1
cependant, je ne sais pas si c'est une bonne solution, car j'ai besoin d'introduire les numéros de ligne, ce qui est un peu lourd.
Avez-vous une meilleure?
OriginalL'auteur speendo | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Si vous avez seulement besoin de la colonne d'attribut:
Avis que vous avez encore besoin de commander par
id
d'abord que c'est une colonne de ladistinct on
.Si vous ne souhaitez que des attributs distincts:
Le
distinct on (id)
fait retourner une seule ligne par idwow, très soigné!
ri comme ça 😀
Pas de syntaxe comme celle-ci dans mysql est-il? 🙂
OriginalL'auteur Clodoaldo Neto
Mettre un gros nombre aléatoire en face de chaque enregistrement (id) et de choisir dans chaque groupe de l'enregistrement avec le plus faible nombre aléatoire.
OriginalL'auteur Turdus