在视图中的相同值上创建JSON

时间:2018-10-29 13:17:45

标签: sql json postgresql group-by

我想基于此表在PostgreSQL模式中创建一个新视图:

+--------------+
| id  |  date  |
+-----|--------+
|  A  |  2012  |
|  A  |  2012  |
|  A  |  2013  |
+--------------+

我想得到这种类型的数据:

+-----+--------------------------+
| id  |           date           |
+-----|--------------------------+
|  A  |  {"2012": 2, "2013": 1}  |
+--------------------------------+

我想使用相同的ID表示相同日期出现的时间。可以在postgreSQL中做类似的事情吗?

很抱歉,如果不清楚,但我不是英语。

1 个答案:

答案 0 :(得分:2)

您需要采用两步方法进行汇总。首先,您需要根据ID和日期进行汇总:

select id, "date", count(*) cnt
from x
group by id, "date";

该结果可以用于JSON聚合:

select id, jsonb_object_agg("date", cnt)
from (
  select id, "date", count(*) cnt
  from x
  group by id, "date"
) t
group by id;

在线示例:https://rextester.com/GIC93266