代码之家  ›  专栏  ›  技术社区  ›  Giox

SQL Server查询jsonObject以获取聚合值

  •  0
  • Giox  · 技术社区  · 6 年前

    我有一个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模式是错误的?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Zhorov    6 年前

    下一步可能会有所帮助。你需要使用 OPENJSON() 使用显式架构定义返回带有 ObsPriceValue 列:

    杰森:

    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