首页 > 解决方案 > 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

标签: jsonsql-server

解决方案


您需要一个额外的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

推荐阅读