sql - 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 模式是错误的?
解决方案
下一个方法可能会有所帮助。您需要使用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
推荐阅读
- perl - 在连接 (.) 或字符串中使用未初始化的值 $login_output
- git - 来自差异排序差异的异常合并冲突?
- python - ODBC 使用托管标识连接到 SQL Server
- php - 我被难住了:如何使用 PHP Mailer 发送 HTML 表单
- java - 之后计算数字。(点)在java中
- c# - 在需要逐行运行的foreach循环中运行两个DataGridView
- rust - 当`cargo install`由于系统配置问题而失败时,如何避免重建依赖关系?
- amazon-web-services - 仅针对一个 lambda 覆盖授权者?
- python - 使用 django 迁移时出现 ProgrammingError 42000
- python - 尽管有种子,但 Numpy 会产生不同的随机数