首页 > 解决方案 > Postgresql 如何在 jsonb 中求和(值)并按月份对它们进行分组?

问题描述

Postgres 查询:

SELECT
  ((data->>'date')) AS time,
  ((data->>'totalAmount')) as values
FROM invoices

输出:

ID 日期 总金额
1 2021-01-16 13
2 2021-01-12 52
3 2020-12-17 11
4 2020-12-08 3

桌子:

CREATE TABLE invoices (
    id serial NOT NULL PRIMARY KEY,
    data jsonb NOT NULL
);

我尝试按月实现总和(值):

ID 日期 总金额
1 2021-01 65
2 2020-12 14

我知道 postgres 提供:

它似乎不适用于 jsonb。

标签: jsonpostgresqljsonb

解决方案


您需要将文本值转换为 adate然后您可以使用例如to_char()从中获取月份:

select to_char((data->>'date')::date, 'yyyy-mm') AS month,
       sum((data->>'totalAmount')::int) as values
from invoices
group by to_char((data->>'date')::date, 'yyyy-mm')

推荐阅读