作者paranoia5201 (社会黑暗、行路难)
看板Database
标题Re: [SQL ] 从json/array中计算出各物件个数
时间Sat Jun 13 18:04:55 2020
感谢先前这个问题,高手提供了 json_table 来作为解方,
然而现在有更进阶的问题想要来请教。
简而言之,我要取的资料是在 json 档案的第三层,
取成功的语法为以下两者(结果相同)
data->>'$.events[*].markets[*].title'
json_extract(data, '$.events[*].markets[*].title')
资料原始模样如下:
{
"round":
{
"id": "200607155540uRndtkdv56427", "bet": true, "round": 19,
"settle": true, "userId": "181210130814puid35139258",
"sportId": "sr:sport:1", "countryCode": "ng", "ticketCount": 1,
"openBetsCount": 1
},
"events": [{
"id": "200607155537uEvetkdv55698",
"markets": [{"id": "200607155537uMartkdv55699",
"type": "12",
"guide": "",
"title": "1X2",
"oddCount": 3
}]
}]
}
然而这只是节录的一部分,如果全部取出,上面语法取出的资料长相会是如下:
[
"1X2", "O/U", "O/U", "O/U", "O/U", "O/U", "O/U",
"Double Chance", "GG/NG", "Handicap", "Handicap"
]
期待的结果如下:
round_id title count(*)
200607155540uRndtkdv56427 1X2 1
200607155540uRndtkdv56427 O/U 6
200607155540uRndtkdv56427 Double Chance 1
200607155540uRndtkdv56427 GG/NG 1
200607155540uRndtkdv56427 Handicap 2
如果是原网页中的高手解法,现在的困惑是不晓得要把路径
'$.events[*].markets[*].title' 放在哪里。
无论是放在下列 '$[*]' 或 '$' 的位置都是喷出错误讯息......
SELECT j.fruit, count(*)
FROM person p
JOIN JSON_TABLE(
p.fruits,
'$[*]' columns (fruit varchar(50) path '$')
) j GROUP BY j.fruit;
https://bit.ly/3fkEBO3
再麻烦高手抽空指导,感激不尽~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.167.134.52 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1592042698.A.4F1.html
※ 编辑: paranoia5201 (1.167.134.52 台湾), 06/13/2020 18:05:57
※ 编辑: paranoia5201 (1.167.134.52 台湾), 06/13/2020 18:06:12