【问题标题】:Group data by column and output as JSON [closed]按列分组数据并输出为 JSON [关闭]
【发布时间】:2020-04-22 13:19:15
【问题描述】:

我有一张如下表。我想显示按banner_id分组的图片(横幅)

|-----------|-------------|----------------|
|      id   |  banner_id  | image          |
|-----------|-------------|----------------|
|      1    | 1           | {banner-1.jpg} | 
|-----------|-------------|----------------|
|      2    | 1           | {banner-2.jpg} | 
|-----------|-------------|----------------|
|      3    | 2           | {banner-3.jpg} | 
|-----------|-------------|----------------|

我的预期结果是:

 {
    "banner_id": 1,
    "banners": [
          {
             "image": "banner-1.jpg"
           },
           {
             "image": "banner-2.jpg"
            },
       ]
  },
 {
    "banner_id": 2,
    "banners": [
          {
             "image": "banner-3.jpg"
           },
       ]

  }

我不知道如何才能做到这一点。谁能帮帮我

【问题讨论】:

    标签: sql json postgresql group-by


    【解决方案1】:

    不清楚您希望结果采用什么格式。作为常规 SQL 结果集,您可以使用:

    select banner_id, array_agg(image) as banners
    from t
    group by bannher_id;
    

    如果这是您想要的实际结构,您可以将其转换为 JSON 格式。

    【讨论】:

      【解决方案2】:

      可以使用json函数:

      select
          jsonb_build_object(
              'banner_id',
              banner_id,
              'banners',
              jsonb_agg(jsonb_build_object('image', image))
          ) res
      from mytable
      group by banner_id
      

      Demo on DB Fiddle

      |资源 | | :------------------------------------------------ ---------------------------------- | | {"banners": [{"image": "banner-3.jpg"}], "banner_id": 2} | | {"banners": [{"image": "banner-1.jpg"}, {"image": "banner-2.jpg"}], "banner_id": 1} |

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        相关资源
        最近更新 更多