Я работаю с postgres
У меня есть таблица (tbl
) со следующими полями: name, words
тип полей - строки)
Мне нужно вычислить для каждого name
(что составляет aaa
) средний процент words
, которые не равны нулю
Я пробовал что-то вроде:
SELECT AVG(COUNT(words is not null) - count(*))
FROM tbl
WHERE name="test"
Но я получил следующую ошибку :
aggregate function calls cannot be nested
Я пытался изменить запрос на:
SELECT (AVG((SELECT COUNT(*) FROM tbl WHERE words IS NOT NULL) - (SELECT COUNT(*) FROM tbl))
FROM tbl
WHERE name="test"
, но кажется, что я получил неправильные значения.
Например, для следующей таблицы:
name, words
----------------------------
test abc test, 1, 2, 3
t2 NULL
test NULL
t3 NULL
t2 a,b,c,d,e
test def zxy
t2 NULL
результат для test
должен быть 2/3
(потому что есть 2 результата test
, которые не равны нулю, и в таблице 3 test
)
Как правильно написать запрос?