Как создать вложенный json с агрегатами из одной таблицы, используя Postgresql 9.4 - PullRequest
0 голосов
/ 13 февраля 2020

Я использую PostgreSQL 9.4 и пытаюсь использовать функции JSON для построения вложенного JSON с агрегацией.

Моя структура таблицы выглядит следующим образом:

id|display_key |state|age|gender|count
1 | 1          |CA  | 34| Male  | 25
2 | 1          |CA  | 30| Male  | 15
3 | 1          |CA  | 30| Female| 25
4 | 1          |AZ  | 31| Female| 25
5 | 2          |CA  | 30| Female| 25

Я хочу, чтобы результат JSON дал мне счет населения на уровне штата, а затем я хочу перейти к другим измерениям, таким как возраст и пол.

Ожидаемый результат JSON:

{
   "info":[
      {
         "display_id":1,
         "states":[
            {
               "state_name":"CA",
               "count":65,
               "ages":[
                  {
                     "age":34,
                     "count":25,
                     "genders":[
                        {
                           "gender":"Male",
                           "count":25
                        }
                     ]
                  },
                  {
                     "age":30,
                     "count":40,
                     "genders":[
                        {
                           "gender":"Male",
                           "count":15
                        },
                        {
                           "gender":"Female",
                           "count":25
                        }
                     ]
                  }
               ]
            },
            {
               "state_name":"AZ",
               "count":25,
               "ages":[
                  {
                     "age":31,
                     "count":25,
                     "genders":[
                        {
                           "gender":"Female",
                           "count":25
                        }
                     ]
                  }
               ]
            }
         ]
      },
      {
         "display_id":2,
         "states":[
            {
               "state_name":"CA",
               "count":25,
               "ages":[
                  {
                     "age":30,
                     "count":25,
                     "genders":[
                        {
                           "gender":"Female",
                           "count":25
                        }
                     ]
                  }
               ]
            }
         ]
      }
   ]
}
...