2

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

4 回答 4

2

老问题,但我面临同样的问题。

我的回答是针对您需要按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
...
于 2017-02-16T08:19:13.893 回答
0

是的。使用 ARRAY_SORT()。

ARRAY_SORT( ARRAY_AGG( [ age, fname ] ) )[0:3] AS res ...
于 2016-05-26T14:42:55.183 回答
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;
于 2019-09-15T17:18:12.283 回答
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 }) 作为结果 ...

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

问候。

于 2019-09-15T14:23:53.780 回答