我有一个postgres数据库,其中一些列数据存储如下:
guest_composition | charing_age | [{"a" 1、"b": 1,"c": 1,"children_ages": [10 5 2, 0.1]}] | 3 |
---|---|
[{"a" 1、"b": 1,"c": 1,"children_ages": [2.5, 1, 4]}] | 3 |
您可以使用SQL JSON路径函数提取所有儿童年龄的数组:
select jsonb_path_query_array(r.guest_composition, '$[*].children_ages[*] ? (@ > 3)')
from reservations r;
这个数组的长度就是你想要的计数:
select jsonb_array_length(jsonb_path_query_array(r.guest_composition, '$[*].children_ages[*] ? (@ > 3)'))
from reservations r;
我不清楚charging_age
是否是一列,并且可以在每一行更改。如果是这种情况,您可以向JSON路径函数传递一个参数:
select jsonb_path_query_array(
r.guest_composition, '$[*].children_ages[*] ? (@ > $age)',
jsonb_build_object('age', charging_age)
)
from reservations r;