Это должно работать:
COUNT(distinct CASE WHEN status IN ('failed') THEN id END) * 1.0 /
NULLIF(COUNT(CASE WHEN status = 'completed' THEN id END), 0)
Вы можете бросить на поплавок. Я предпочитаю просто использовать * 1.0
.
Отмечу, что в определении count_completed
используется count(distinct)
, но это соотношение - нет. Возможно, это ошибка.
Скорее всего, мне понадобится пропорция неудавшихся состояний в целом, а не соотношение. Если это приемлемо и COUNT(DISTINCT)
не требуется ни для одного из подсчетов, то это можно упростить до:
avg( (status = 'failed')::int )