首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PostgreSQL中计算jsonb的总和?

如何在PostgreSQL中计算jsonb的总和?
EN

Stack Overflow用户
提问于 2022-07-26 21:42:25
回答 2查看 26关注 0票数 1

我几乎没有包含包含加密货币金额的jsonb的字段“数据”的记录:

(加密货币在任何数量上都可以不同)

其任务是计算加密货币的总数,并得到如下内容:

代码语言:javascript
运行
复制
CODE:    SUM:
BTC      185.00002100
DOGE     2.00000000

我如何使用SQL来做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-26 22:14:52

使用jsonb_each_textCROSS JOIN中提取json记录的每个元素,然后按keyvalues进行分组。

代码语言:javascript
运行
复制
SELECT j.key, sum(j.value::numeric)
FROM mytable
CROSS JOIN jsonb_each_text(data::jsonb) j (key,value)
GROUP BY j.key

演示:db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2022-07-26 22:14:56

一种自然的方法是在一行中得到和:

代码语言:javascript
运行
复制
with my_table(data) as (
values
    ('{"BTC": "0.1"}'::jsonb),
    ('{"BTC": "0.2", "DOGE": "2.0"}'),
    ('{"BTC": "0.3"}')
)

select 
    sum((data->>'BTC')::numeric) as btc, 
    sum((data->>'DOGE')::numeric) as doge
from my_table;

 btc | doge
-----+------
 0.6 |  2.0
(1 row)

如果您坚持采用专栏式演示文稿:

代码语言:javascript
运行
复制
with my_table(data) as (
values
    ('{"BTC": "0.1"}'::jsonb),
    ('{"BTC": "0.2", "DOGE": "2.0"}'),
    ('{"BTC": "0.3"}')
)

select code, sum((data->>code)::numeric)
from my_table
cross join unnest(array['BTC', 'DOGE']) as code
group by code
order by code;

 code | sum
------+-----
 BTC  | 0.6
 DOGE | 2.0
(2 rows)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73130040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档