I have a table with 3 columns in Postgres 14.2: name
, name_adds
, aditional
.
And these rules:
name
andname_adds
can be filled with the same value or not. Example: name (john) and name_adds (doe) or both value is (john)column
additional
has one of two formats:format 1:
{"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}]}
format 2:
[{"value_1": 10,"value_2": 11},{"value_1": 1,"value_2": 19}
If (name = name_adds) sum default -> value_1
If (name != name_adds) sum non_default -> value_1
How can I sum format 1 or 2 from point 2. based on the rules in point 3. and 4.?
Example table:
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}]
Expected result:
name name_adds sum_result
---------------------------------------------------------------
john john 300
john doe 600
downy downy 11
downy dan 11
I tried a query in this online demo, but didn't manage to get the expected result.