我有以下N1QL
查询:
SELECT COUNT(tutorial) AS rows,
ARRAY_AGG([age,fname])[0:3] AS res
FROM tutorial
我可以按res
中的年龄值订购DESC
的子数组吗?
我在尝试更改订单时尝试了以下所有内容
ORDER BY res[*].age DESC
ORDER BY res[*][age] DESC
ORDER BY age DESC
ORDER BY res.age DESC
您也可以直接在以下链接上执行上述查询,以查看文档的主要结构和结果http://query.pub.couchbase.com/tutorial/#3
答案 0 :(得分:2)
老问题,但我遇到了同样的问题。
我的答案特定于您需要按 DESC 值进行排序。
ARRAY_SORT()似乎只适用于订单 - DESC似乎没有任何选项。
然而,我发现还有ARRAY_REVERSE()
所以当我把这两个结合起来时,我得到了理想的结果,例如:
...
ARRAY_REVERSE( ARRAY_SORT( yourArrayNeeds ) ) AS result
...
此外,让我失望的其他事情是,使用ARRAY_SORT()进行排序的项目需要在数组列表中按字母顺序排在第一位。因此,例如,如果希望按'item.submitted'排序:
DID NOT 按要求排序:
...
ARRAY_SORT({ "submitted":item.submitted, "name":item.name }) AS result
...
这就是工作:
...
ARRAY_SORT({ "_submitted":item.submitted, "name":item.name }) AS result
...
...然后如果您想要DESC订单:
...
ARRAY_REVERSE( ARRAY_SORT({ "_submitted":item.submitted, "name":item.name }) ) AS result
...
答案 1 :(得分:0)
是。使用ARRAY_SORT()。
ARRAY_SORT( ARRAY_AGG( [ age, fname ] ) )[0:3] AS res ...
答案 2 :(得分:0)
我将使用对我有用的值来编辑先前的回复:
我的答案特定于您需要按DESC值排序。
ARRAY_SORT()仅适用于升序-DESC似乎没有任何选择。但是,我发现也有ARRAY_REVERSE()。在我的查询中,ARRAY_REVERSE无法正常工作。
这不是想要的排序:
... ARRAY_SORT({“” submitted“:item.submitted,” name“:item.name})作为结果 ...
已解决:
... ARRAY_SORT({“” _submitted“:item.submitted,” name“:item.name})作为结果 ...
...,然后,如果您想要DESC订单:
... ARRAY_SORT({“” _submitted“:-item.submitted,” name“:item.name})作为结果 ...
查看订购字段开头的减号。
问候。
答案 3 :(得分:0)
在表单子句中使用子查询表达式
SELECT d.rows,
(SELECT RAW r FROM d.res AS r ORDER BY r.age DESC LIMIT 3) AS res
FROM (SELECT COUNT(tutorial) AS rows, ARRAY_AGG({age, name})AS res
FROM tutorial) AS d;