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