sql - 在postgres的json中计算唯一的嵌套键/值?
问题描述
如何计算postgres中json中唯一嵌套键/值?
每条user
记录都有一个名为的 json 列hobby_years
,其结构如下所示,但因用户而异。
用户的示例hobby_years
值:
{
"soccer": {
"2006": 1,
"2007": 1
},
"skiing": {},
"basketball": {
"2006": 1,
"2016": 1,
"2017": 1,
"2018": 1
},
"painting": {
"2008": 1,
"2009": 1,
"2014": 1,
"2015": 1,
"2016": 1
}
}
我想知道一个或多个特定爱好中存在多少独特的年份。即:足球和篮球 - 应该返回5
。
或者,如果可以使此活动更容易,我可以选择如下构造数据
{
"soccer": [2006, 2007],
"skiing": [],
"basketball": [2006, 2016, 2017, 2018],
"painting": [2008, 2009, 2014, 2015, 2016]
}
这可能吗?
解决方案
像这样的东西?
SELECT
name, -- or whatever field you want to use to identify the user
(SELECT COUNT(year)
FROM (
SELECT DISTINCT JSON_ARRAY_ELEMENTS(value)::TEXT AS year
FROM JSON_EACH(hobby_years)
WHERE key IN ('soccer', 'basketball')) years
) AS count
FROM users
推荐阅读
- python - sqlalchemy.exc.DataError:(pymysql.err.DataError)(1406,“第 1 行的列‘密码’的数据太长”)
- function - 为什么 cond 函数不在方案中打印?
- c - 如何确保浮点值不越界?
- kotlin - onPause() 方法在活动之间被调用
- javascript - Firestore JS - 在事务中递增
- arduino - 给led随机颜色
- python - For 循环遍历 csv 的列
- python - 在 Python 3.7 virtenv 中安装“cvxpy”并收到“无模块”错误
- php - wp_remote_post() 函数的 php 致命错误
- html - 为什么在 Angular 10 中双向绑定对我不起作用?