json - 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。
解决方案
您需要将文本值转换为 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')
推荐阅读
- c# - cv::VideoCapture 在 C# 项目中从 DLL 使用时不会打开文件或流
- swift - 在 Swift 中的同一个 VC 上点击按钮后,有没有办法显示以前隐藏在早期代码行中的 UI 元素?
- sql-server - 禁用目标数据库的自动填充以进行数据库还原
- android - Android 导航组件 - 如何导航到嵌套图中的其他 startDestination
- powershell - 保留数字字符 使用 PowerShell 将非数字字符复制到相邻列 CSV
- java - 如何为现有的 Logback 配置提供补充?
- sql - SQL Server:根据使用的 WHERE 条件,将数据类型 nvarchar 转换为数字时出错
- android - 如何在android中的其他布局之上显示布局
- python - 我想让python在这个计算器中识别“num1”和“num2”是否是数字,以便python可以通知你没有输入有效的东西
- git - 解决报告的合并冲突后,是否需要重复运行相同的合并命令?