首页 > 解决方案 > SQL Server 查询 JSONobject 以获取聚合值

问题描述

我有一个 JSON 对象存储在 SQL Server 的nvarchar(max)列中。JSON 看起来像这样:

{
"data": [{
        "RespID": 3512,
        "ObsPriceValue": 2.34
    }, {
        "RespID": 4904,
        "ObsPriceValue": 2.54
    }, {
        "RespID": 5127,
        "ObsPriceValue": 3.44
    }]
}

上面的示例数组由三个项目组成,但我不知道记录中有多少项目,它们可以是 2,也可以是最多 30。

表中的每一行都有一个像上面这样的对象。

我想在单个查询中获取 ObsPriceValue 字段的平均值

我试过了JSON_QUERY,但我总是指定元素的索引。

有没有办法获取它或存储数据的 JSON 模式是错误的?

标签: sqljsonsql-server

解决方案


下一个方法可能会有所帮助。您需要使用OPENJSON()显式架构定义来返回包含ObsPriceValue列的表:

JSON:

DECLARE @json nvarchar(max) = N'{"data": [{
        "RespID": 3512,
        "ObsPriceValue": 2.34
    }, {
        "RespID": 4904,
        "ObsPriceValue": 2.54
    }, {
        "RespID": 5127,
        "ObsPriceValue": 3.44
    }]
}'

陈述:

SELECT AVG(ObsPriceValue) AS AvgObsPriceValue
FROM OPENJSON(@json, '$.data') WITH (
   ObsPriceValue numeric(10, 2) '$.ObsPriceValue' 
) j 

输出:

----------------
AvgObsPriceValue
----------------
2.773333

推荐阅读