Selecione uma linha aleatória para cada grupo

Eu tenho uma mesa assim

ID    ATTRIBUTE
 1    A
 1    A
 1    B
 1    C
 2    B
 2    C
 2    C
 3    A
 3    B
 3    C

Eu gostaria de selecionarapenas um atributo aleatório para cada ID. O resultado, portanto, poderia ser assim (embora essa seja apenas uma das muitas opções

ATTRIBUTE
B
C
C

Esta é minha tentativa neste problema

SELECT
  "ATTRIBUTE"
FROM
  (
  SELECT
    "ID",
    "ATTRIBUTE",
    row_number() OVER (PARTITION BY "ID" ORDER BY random()) rownum
  FROM
    table
  ) shuffled
WHERE
  rownum = 1

no entanto, não sei se essa é uma boa solução, já que preciso introduzir números de linhas, o que é um pouco incômodo.

Você tem um melhor?

questionAnswers(2)

yourAnswerToTheQuestion