Как рассчитать процент от общего количества РАЗЛИЧНЫХ значений

#sql #postgresql

Вопрос:

Как рассчитать процент от количества РАЗЛИЧНЫХ значений? Например, у меня есть набор данных с людьми, которые могут выбрать несколько симптомов (то есть у каждого человека может быть от 0 до 10 значений).

 person 1 - symptom A
person 1 - symptom B
person 2 - symptom B
person 2 - symptom C
person 2 - symptom D
person 3 - no symptoms
person 4 - symptom A
 

и т.д. Например, если общее количество УНИКАЛЬНЫХ людей равно 4 и 2 из них выбрали симптом А, то я хотел бы видеть: А = 2/4 = 50%, а не А=2/6 = 33% (не то, что мне нужно).

Как это сделать?

Ответ №1:

Хммм … если предположить, что симптомы не повторяются у одного человека, то один из методов:

 select symptom,
       count(*) * 1.0 / (select count(distinct person) from t) as ratio
from t
group by symptom