Postgres 查询 json 数组以查找符合条件的计数
Postgres query json array to find the count which matches the condition
我的 Postgres 12 数据库中有一个 table my_table
,列名 itinerary
。
select column_name, data_type from information_schema.columns where table_name = 'my_table' and column_name = 'itinerary';
column_name | data_type
-------------+-----------
itinerary | ARRAY
(1 row)
行程中的每个元素都是一个 JSON,字段名称为 address
,字段名称为 city
。我可以使用以下查询找到与 itinerary
的第一个元素的条件相匹配的计数:
select count(*) from my_table where lower(itinerary[1]->'address'->>'city') = 'oakland';
count
-------
12
(1 row)
我还可以使用以下查询找到数组的长度:
select array_length(itinerary, 1) from my_table limit 1;
我想找到所有行程中可以有城市名称Oakland
的记录,而不只是作为第一站。我不确定如何弄清楚。提前致谢。
您可以使用 exists
和 unnest()
:
select count(*)
from mytable t
where exists (
select 1
from unnest(t.itinerary) as x(obj)
where x.obj -> 'address'->>'city' = 'oakland'
)
我的 Postgres 12 数据库中有一个 table my_table
,列名 itinerary
。
select column_name, data_type from information_schema.columns where table_name = 'my_table' and column_name = 'itinerary';
column_name | data_type
-------------+-----------
itinerary | ARRAY
(1 row)
行程中的每个元素都是一个 JSON,字段名称为 address
,字段名称为 city
。我可以使用以下查询找到与 itinerary
的第一个元素的条件相匹配的计数:
select count(*) from my_table where lower(itinerary[1]->'address'->>'city') = 'oakland';
count
-------
12
(1 row)
我还可以使用以下查询找到数组的长度:
select array_length(itinerary, 1) from my_table limit 1;
我想找到所有行程中可以有城市名称Oakland
的记录,而不只是作为第一站。我不确定如何弄清楚。提前致谢。
您可以使用 exists
和 unnest()
:
select count(*)
from mytable t
where exists (
select 1
from unnest(t.itinerary) as x(obj)
where x.obj -> 'address'->>'city' = 'oakland'
)