如何根据 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;
我有以下 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;