我有一张表格,其中包含一个jsonb对象数组作为一列:
| event_id | attendees |
|----------|----------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [{"name": "john smith", "username": "jsmith"}, {"name": "jeff jones", "username": "jjones"}, {"name": "steve woods", "username": "swoods"}] |
| 2 | [{"name": "al williams", "username": "awilliams"}, {"name": "james lee", "username": "jlee"}, {"name": "bob thomas", "username": "bthomas"}] |
| 3 | [{"name": "doug hanes", "username": "dhanes"}, {"name": "stan peters", "username": "speters"}, {"name": "jane kay", "username": "jkay"}] |
我想要针对每个事件获取符合特定条件的所有参与者的数量(比如他们的用户名以“j”开头)。
查看文档后,我并没有找到能用于jsonb对象数组的函数。最接近的是jsonb_array_elements函数,但它返回一个集合而不是单个值。所以类似这样的:
select event_id, count(jsonb_array_elements(attendees) ->> 'username')
from events
where jsonb_array_elements(attendees) ->> 'username' like 'a%'
group by event_id
显然不能这样做。有没有什么方法可以返回这个输出(每个事件以j开头的用户名计数):
| event_id | count |
|----------|-------|
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |