如何根据ARRAY_AGG的子数组值来订购N1QL结果

时间:2016-05-26 11:22:28

标签: couchbase n1ql

我有以下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

4 个答案:

答案 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;