col1
является результатом агрегации. Postgres допускает псевдонимы для столбцов в group by
, но не having
. Поэтому переместите условие в предложение having
:
select date(time) as day,
(trunc(cast(count(*) filter (where status similar to '%404%') as decimal) / count(*), 5)) as col1
from log
group by day
having (trunc(cast(count(*) filter (where status similar to '%404%') as decimal) / count(*), 5)) > 0.01
order by col1 desc;
Хотя filter
действительно причудливо, я думаю, что эта версия логики проще:
trunc(cast(avg( (status similar to '%404%')::decimal), 5) as col1
Также легче вписать в предложение having
.