我的订单表看起来是这样的:
-----------------------------------------------------------
| id | order
-----------------------------------------------------------
|1 |[{"order_quantity" : 2, "active" : TRUE, "price" : $100 }, {"order_quantity" : 4, "active" : FALSE, "price" : $200 }]
|2 |[{"order_quantity" : 2, "active" : TRUE, "price" : $170 }]
|3 |[{"order_quantity" : 2, "active" : TRUE, "price" : $120 }]
|4 |[{"order_quantity" : 2, "active" : TRUE, "price" : $150 }, {"order_quantity" : 3, "active" : TRUE, "price" : $200 }, {"order_quantity" : 5, "active" : TRUE, "price" : $200 }]
-----------------------------------------------------------
对每个元素中的括号WHERE active == TRUE
内的JSON
元素进行计数时需要的结果:
------------
id | counts
------------
|1 | 1
|2 | 1
|3 | 1
|4 | 3
------------
这是我正在使用的,但它没有给予我要查找的数据,因为它没有查看每个字典以查看active == TRUE
SELECT id, json_array_length(order::JSON)
FROM orders
------------
id | counts
------------
|1 | 2
|2 | 1
|3 | 1
|4 | 3
------------
2条答案
按热度按时间w3nuxt5m1#
使用
json_array_elements()
选择json数组的所有元素,过滤元素,最后计数剩余的元素,按id
分组。Db<>fiddle.中的现场演示
注意事项:
FROM
子句中的set返回函数(如json_array_elements()
)作为横向连接;true
(而不是TRUE
);money
类型,使用300
代替$300
;c9qzyr3d2#
我首先使用json_array_elements规范化每个订单的订单,然后能够进行计数并检查
active = TRUE
是否