Postgres查询的子查询count()

时间:2018-12-07 02:58:48

标签: postgresql gis aggregate-functions postgis

我有两个要访问的流量表,它们正在联接并在地图上可视化。

我正在尝试编写一个计数器,该计数器创建一个查询结果,并计算一个特定IP地址在日志中显示的次数。我认为这将采用子查询的形式,该查询返回主查询正在选择的特定行的行数。

当我运行以下查询时,我得到的错误是more than one row returned by a subquery used as an expression

select
squarespace_ip_addresses.ip,
squarespace_ip_addresses.latitude,
squarespace_ip_addresses.longitude,
st_SetSrid(ST_MAKEPOINT(squarespace_ip_addresses.longitude, squarespace_ip_addresses.latitude), 4326) as geom,
(select count(hostname) from squarespace_logs group by hostname) as counter,
squarespace_logs.referrer
from
squarespace_ip_addresses
left outer join
squarespace_logs
on
squarespace_ip_addresses.ip = squarespace_logs.hostname

向我提出的建议是选择中的子查询,该子查询按主查询输出进行过滤,从而对每一行运行该查询。

有人有见识吗?

1 个答案:

答案 0 :(得分:1)

汇总派生表(FROM子句中的子查询)中的数据:

select
    a.ip,
    a.latitude,
    a.longitude,
    st_SetSrid(ST_MAKEPOINT(a.longitude, a.latitude), 4326) as geom,    
    c.count,
    l.referrer
from squarespace_ip_addresses a
left join squarespace_logs l on a.ip = l.hostname
left join (
    select hostname, count(*)
    from squarespace_logs
    group by hostname
    ) c on a.ip = c.hostname
相关问题