【问题标题】:postgres aggregration over a few tables几个表的postgres聚合
【发布时间】:2018-02-15 18:10:40
【问题描述】:

我有以下表格:

targeting
-- id
-- type
-- value

performance
-- id
-- ad_name
-- installs

performance_targeting
-- id
-- performance_id
-- targeting_id

我想获取每个效果的目标值。

为了实现它,我写道:

select performance_id, string_agg(value, ',' order by value) as values from 
targeting join performance_targeting
on targeting.id = performance_targeting.id
group by performance_id

但结果不正确。

参见sqlfiddle - 如您所见,ID 为 1 的表现与定位 18-24 岁和女性有关。我希望 array_agg 显示以下内容:

performance_id   targeting_values 
1                18-24,female
2                25-34,male
3                18-24,female
4                25-34,female

怎么了?

【问题讨论】:

    标签: sql postgresql string-aggregation


    【解决方案1】:

    你有一个小错误。你有performance_targeting.id 而不是performance_targeting.targeting_id

    select performance_id, 
       string_agg(value, ', ' ORDER BY value) as values 
    from targeting 
    join performance_targeting on targeting.id = performance_targeting.targeting_id
    group by performance_id
    

    demo

    【讨论】:

    • 我唯一的问题是在一个有 30M 记录的表上实现这个 string_agg 需要很长时间:-(
    • @Dejell 我可以想象。你真的需要所有这些数据吗,你不能使用一些过滤器+索引吗?
    • 使用过滤器非常慢。引擎会在过滤记录后计算 string_agg 吗?
    • @Dejell 当然,你有支持你的谓词的索引吗?使用explain 也可以检查查询计划。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多