PostgreSQL возвращает результирующий набор select как json

#sql #json #postgresql

Вопрос:

Я хотел бы, чтобы psql возвращал результат в формате json со следующим примером формата:

 {
   "2021-10-27" : 324,
   "2021-10-26" : 14,
   "2021-10-28" : 24,
   "2021-10-30" : 4,
}
 

Мой SQL-это :

 SELECT DATE(user.updated_at), COUNT(*) 
  FROM users AS user
 GROUP BY DATE(user.updated_at)
 

Как я могу вернуть приведенный выше SQL в виде json.
Я использую psql версии 13.

Спасибо.

Ответ №1:

Вы можете использовать JSON_OBJECT_AGG() функцию после вложения текущего оператора SELECT, например

 SELECT JSON_OBJECT_AGG( updated_at, cnt )
  FROM (
        SELECT DATE(updated_at) AS updated_at, COUNT(*) AS cnt 
          FROM users
         GROUP BY DATE(updated_at)
       ) AS u
 

Demo

Комментарии:

1. спасибо за ответ и демонстрацию!

2. добро пожаловать @mgi

Ответ №2:

 SELECT
json_build_object(
    'current_date', json_agg(users.current_date),
    'current_date', json_agg(users.current_date)
) FROM users
 

Примечание: «current_date-это значения даты в таблице пользователей»

Комментарии:

1. Спасибо, но ваш ответ не даст того же результата, что и мой sql. Он будет представлять current_date дважды как json. Результатом должна быть дата и количество(сгруппировано по дате)