Вычисление среднего в SQL

#mysql #sql #count #sum #pivot

#mysql #sql #подсчитать #сумма #сводная

Вопрос:

Моя таблица выглядит так

 C1   Bool    Count

A    TRUE     5
A    FALSE    5
B    FALSE    6
C    TRUE     2
C    FALSE    8
  

Я хочу вычислить часть count в Bool=True, сгруппировать по C1. Идеальный результат должен быть

 C1   Portion
A      0.5
B       0
C      0.2
  

Я не совсем уверен, как этого добиться. Действительно ценю любую помощь

Ответ №1:

Вы можете выполнить условную агрегацию:

 select c1, sum(case when bool then count else 0 end) / sum(count) ratio
from mytable
group by c1
  

Предполагается, что bool это bool[ean] тип данных, поэтому его можно использовать непосредственно в предикате условия.

Обратите внимание, что оба bool и count являются ключевыми словами языка в MySQL, следовательно, плохой выбор имен столбцов (приведенный выше запрос приведет к ошибке, если вы запустите его как есть).