代码之家  ›  专栏  ›  技术社区  ›  Dejell

postgres在几张桌子上聚集

  •  0
  • Dejell  · 技术社区  · 8 年前

    我有以下表格:

    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\u agg显示以下内容:

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

    怎么了?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Radim Bača    8 年前

    你有一只小虫子。你有 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