如何根据 ARRAY_AGG 的子数组值对 N1QL 结果进行排序

How to order N1QL results based on sub-array value of ARRAY_AGG

我有以下 N1QL 查询:

 SELECT COUNT(tutorial) AS rows,
   ARRAY_AGG([age,fname])[0:3] AS res
      FROM tutorial

我可以在 DESC 中按年龄值排序 res 的子数组吗 我尝试了以下所有方法并注意到订单的变化

ORDER BY res[*].age DESC
ORDER BY res[*][age] DESC
ORDER BY age DESC
ORDER BY res.age DESC

也可以在link后面直接执行前面的查询,查看文档的主要结构和结果http://query.pub.couchbase.com/tutorial/#3

是的。使用 ARRAY_SORT()。

ARRAY_SORT( ARRAY_AGG( [ age, fname ] ) )[0:3] AS res ...

老问题,但我遇到了同样的问题。

我的回答是针对您对按 DESC 值排序的需求。

ARRAY_SORT() 似乎只适用于发送订单 - DESC 似乎没有任何选项。

不过,我发现还有ARRAY_REVERSE()

所以当我将这两者结合起来时,我得到了想要的结果,例如:

...
ARRAY_REVERSE( ARRAY_SORT( yourArrayNeeds ) ) AS result
...

此外,让我感到困惑的另一件事是使用 ARRAY_SORT() 排序的项目需要在数组列表中按字母顺序排在第一位。因此,例如,如果希望按 'item.submitted':

排序

这个没有按需要排序:

...
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
...

我将使用适合我的值编辑之前的回复:

我的回答是针对您对按 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 }) 作为结果 ...

查看降序排序字段开头的减号。

你好。

在form子句中使用子查询表达式

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;