Tenho uma consulta na qual estou tentando adicionar uma coluna que contém uma porcentagem de registros que possuem um determinado valor versus o número total de registros. Posso fazer com que a subconsulta funcione sozinha, mas quando a conecto à consulta principal, ela falha com um erro:
ERROR: subquery uses ungrouped column "ipam_addresses.host_id" from outer query
minha consulta é:
select
ipam_networks.ipam_id,
ipam_networks.net_name,
ipam_networks.net_cidr,
zone,
count(*),
to_char(100*(select count(*) where ipam_addresses.host_id = 0) / (select count(*)), '999D99%') v
from
ipam_addresses
left outer join
ipam_networks
on ipam_addresses.parent_id = ipam_networks.ipam_id
where
ipam_addresses.ip_state != 'DHCP_FREE'
group by
ipam_networks.ipam_id, ipam_networks.net_name, ipam_networks.net_cidr;
Por que está lançando esse erro mesmo se eu especificar o nome da tabela na subconsulta e o que posso fazer para corrigir isso?
Você pode fazer isso usando um agregado filtrado, sem necessidade de subseleções
A conversão
::numeric
é necessária para evitar a divisão inteira