json - JSON 数组中 JSON 值的 SUM 查询
问题描述
我需要一个查询来对 json 数组中的值求和。我可以用 sql 查询来做到这一点吗?
这是我在数据列中的示例 json,其类型为nvarchar(max)
;
[{"V":0.1,"T":"07.01.2020 00:10:26"}, {"V":0.2,"T":"07.01.2020 00:10:36"}]
预期输出列 V = 0.3
我试过这个查询,但结果为空。
SELECT top(1)
SUM(CAST(JSON_QUERY(column_name,'$.V') as float)) AS V
FROM [Pmd].Trend
解决方案
您需要一个额外的APPLY
运算符和一个OPENJSON()
带有显式模式(WITH
子句)的调用:
桌子:
SELECT *
INTO Trend
FROM (VALUES
(N'[{"V":0.1,"T":"07.01.2020 00:10:26"}, {"V":0.2,"T":"07.01.2020 00:10:36"}]')
) v (JsonColumn)
陈述:
SELECT *
FROM Trend t
OUTER APPLY (
SELECT SUM(V) AS V
FROM OPENJSON(t.JsonColumn) WITH (V numeric(5, 1) '$.V')
) j
结果:
JsonColumn V
-------------------------------------------------------------------------------
[{"V":0.1,"T":"07.01.2020 00:10:26"}, {"V":0.2,"T":"07.01.2020 00:10:36"}] 0.3
作为附加选项 - 一种方法,使用JSON_VALUE()
:
SELECT *
FROM Trend t
CROSS APPLY (
SELECT SUM(TRY_CONVERT(numeric(5, 1), JSON_VALUE([value], '$.V'))) AS V
FROM OPENJSON(t.JsonColumn)
) j
推荐阅读
- python-3.x - python selenium 刮掉整个桌子
- ios - NotificationBanner swift 3.x 支持
- javascript - 为什么 WebStorm 会在我的 js 文件顶部添加导入语句?
- php - 刷新页面以检索 Woocommerce 设置
- javascript - 如何处理循环内的引用?
- python - Python 3 余弦最近邻格式
- python - 如何使用 sklearn LassoCV,我做错了什么?
- python-3.x - 没有名为“openslide”的模块
- angularjs - 在 html 中正确使用 ng-if 指令
- python - 如果在先前的计算完成之前有新的请求到来,Tensorflow Serving 会失败