[英]How sum query json array object base on other column on postgresql
我使用 postgres 14.2 並有 3 列示例name , name_adds , aditional
並有規則:
{"default":[{"value_1": 100, "value_2": 0.1},{"value_1": 200, "value_2": 0.2}],
"non_default":[{"value_1": 200, "value_2": 0.1}, {"value_1": 400, "value_2": 0.1}]}
[
{
"value_1": 10,
"value_2": 11
},
{
"value_1": 1,
"value_2": 19
}
]
如何根據規則點 3 和 4 在點 2 上對格式 1 或 2 求和。對於如下邏輯
if (name == name_adds) {
if (additional contain default) {
sum (default->value_1)
} else {
// format 2.2
sum (value_1)
}
} else {
if (additional contain non_default) {
sum (default->value_1)
} else {
// format 2.2
sum (value_1)
}
}
預期結果:
桌子上的例子,假設我有如下表
name name_adds additional
---------------------------------------------------------------
john john {"default":[{"value_1": 100, "value_2": 0.1},
{"value_1": 200, "value_2": 0.2}],"non_default":
[{"value_1": 200, "value_2": 0.1}, {"value_1": 400,
"value_2": 0.1}]}
john doe {"default":[{"value_1": 100, "value_2": 0.1},
{"value_1": 200, "value_2": 0.2}],"non_default":
[{"value_1": 200, "value_2": 0.1}, {"value_1": 400,
"value_2": 0.1}]}
downy downy [{"value_1": 10, "value_2": 11},{"value_1": 1,"value_2": 19}]
downy dan [{"value_1": 10, "value_2": 11},{"value_1": 1,"value_2": 19}]
和預期的表為
name name_adds sum_result
---------------------------------------------------------------
john john 300
john doe 600
downy downy 11
downy dan 11
我做了下面的演示鏈接,但仍然沒有達到預期的演示
with cte as (
select
name,
name_adds,
(name = name_adds) name_as_adds,
jsonb_path_query(additional,'$.default[*].value_1') ::numeric with_default
,jsonb_path_query(additional,'$.non_default[*].value_1')::numeric with_no_default
,jsonb_path_query(additional,'$[*].value_1')::numeric as ignore_defaults
from test_json),
cte2 as (
select
name, name_adds,
case when ignore_defaults is null and name_as_adds then with_default
when ignore_defaults is null and name_as_adds is false then with_no_default
when ignore_defaults is not null then ignore_defaults
end as cases
from cte)
select name, name_adds, sum(cases) as sum_result from cte2 group by 1, 2 order by 1 desc;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.