gpt4 book ai didi

javascript - azure cosmos db 中是否有having 子句?如何使用它?

转载 作者:行者123 更新时间:2023-12-03 03:25:38 26 4
gpt4 key购买 nike

我试图编写一个查询,从所有文档中查找最大值。该场景类似于我有 100 个学生文档,其中包含学生姓名、卷号以及该主题数组及其各自分数内的测试数组。因此,我在所有文档中获得了学科物理学的最高分。但我没有得到学生名号。我正试图找出答案。

TestDoc is:

Student[
StudenName:"A",
StudentRollNo :1,
id:"1",
StudentAdd:"---",
Test1:[
{
SubName:"S1",
Marks:20
},
{
SubName:"S2",
Marks:30
},
...

],
Test2:
[
Same as above
],
],

[
STUDENT2
] ,

and so on

我使用的查询是:select MAX(s.Marks) from c join test in c.Test1 join s in test.marks

最佳答案

根据您的描述,您希望在 azure cosmosdb 查询中实现类似 GROUP BY 的功能。

根据我的经验,SQL 中的 azure cosmosdb 聚合 功能仅限于 COUNT、SUM、MIN、MAX、AVG 函数。 azure cosmosdb 不支持 GROUP BY 或其他聚合功能现在。

但是,可以使用存储过程UDF来实现您的聚合需求。

你可以引用一个很棒的包documentdb-lumenize基于DocumentDb存储过程。

对于您帖子中的第一个场景,我在我的 azure cosmosdb 帐户中创建了两个学生文档。

[
{
"id": "1",
"StudenName": "A",
"StudentRollNo": 1,
"Test": [
{
"SubName": "S1",
"Marks": 20
},
{
"SubName": "S2",
"Marks": 30
}
],
},
{
"id": "2",
"StudenName": "B",
"StudentRollNo": 2,
"Test": [
{
"SubName": "S1",
"Marks": 10
},
{
"SubName": "S2",
"Marks": 40
}
],
}
]

然后我将下面通过SQL搜索到的结果集放入上面提到的documentdb-lumenize中,得到max S2标记。

SELECT  c.StudentRollNo,test1.Marks as mark FROM c
join test1 in c.Test
where test1.SubName='S2'

enter image description here

对于您评论中的第二种情况,我删除了上面 SQL 的 where 子句

SELECT  c.StudentRollNo,test1.Marks as mark FROM c
join test1 in c.Test

结果集如:

enter image description here

这仅适用于一个测试。如果您想查询多个测试,您可以使用存储过程

您还可以引用下面的SO线程:

1. Azure DocumentDB - Group By Aggregates

2. Grouping by a field in DocumentDB

关于javascript - azure cosmos db 中是否有having 子句?如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com