【问题标题】:Postgres aggregation function for jsonbjsonb的Postgres聚合函数
【发布时间】:2020-08-10 07:30:48
【问题描述】:

我想聚合 postgres 数据,但我需要一个查询,我可以在哪里使用 针对不同数据类型的聚合函数。 基本上想把这两个查询结合起来。

select browser_id, jsonb_object_agg(key, val)
from (
    select browser_id, key, sum(value::numeric) val
    from aggregated_browser_days, jsonb_each_text(geo_city)
    group by browser_id, key
    ) s
group by browser_id;

select browser_id, sum(pageviews) as total_pageviews,
       STRING_AGG(DISTINCT browser_family, ',') AS browser, 
       STRING_AGG(DISTINCT device_model, ',') AS device_model,
       SUM(timespent) as total_timespent, SUM(sessions) as session_count
from data
GROUP BY browser_id

有人可以指导我吗? 提前致谢

【问题讨论】:

  • edit您的问题(通过点击下面的edit链接)并添加一些示例数据和基于该数据的预期输出为formatted text .请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (edit 您的问题 - 在 cmets 中邮政编码或其他信息)

标签: sql postgresql aggregate-functions jsonb


【解决方案1】:

此数据来自两个不同的表。所以JOIN 似乎是正确的方法。以防基表包含不同的浏览器集,我建议使用FULL JOIN

select *
from (select browser_id, jsonb_object_agg(key, val)
      from (select browser_id, key, sum(value::numeric) as val
            from aggregated_browser_days cross join lateral
                 jsonb_each_text(geo_city)
            group by browser_id, key
           ) s
      group by browser_id
     ) bd full join
     (select browser_id, sum(pageviews) as total_pageviews,
             STRING_AGG(DISTINCT browser_family, ',') AS browser, 
             STRING_AGG(DISTINCT device_model, ',') AS device_model,
             SUM(timespent) as total_timespent, SUM(sessions) as session_count
      from data
      group by browser_id
     ) b
     using (browser_id)

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多