首页 > 解决方案 > 从 Couchbase N1Q1 查询返回的数组中获取最小值和最大值

问题描述

我有一个返回一组有序文档键的查询。我需要从这个返回的数组中找到最小和最大键。

查询以返回文档键列表:

SELECT RAW META(d).id
FROM `orders` AS d
WHERE META(d).id LIKE 'order:%'
ORDER BY META().id LIMIT 5

输出 :

[
    order:1,
    order:2,
    order:3,
    order:4,
    order:5
]

我需要从数组中获取最小值,所以我使用以下查询:

SELECT RAW ARRAY_MIN(
    SELECT RAW META(d).id
    FROM `orders` AS d
    WHERE META(d).id LIKE 'order:%'
    ORDER BY META().id LIMIT 5)
)

为了获得最大值,我在上述查询中使用了 ARRAY_MAX 函数。

如您所见,我必须触发 2 个查询才能获得最小最大值。

问题:有没有办法在单个查询中从文档键数组中获取最小值和最大值?

标签: couchbasen1ql

解决方案


使用 CTE 或 LET pre 6.5.0

WITH aval AS (SELECT RAW META(d).id
              FROM `orders` AS d
              WHERE META(d).id LIKE 'order:%'
              ORDER BY META().id LIMIT 5)
SELECT ARRAY_MIN(aval) AS min, ARRAY_MAX(aval) AS max;

您也可以使用以下内容,因为您的数组元素已排序。

WITH aval AS (SELECT RAW META(d).id
              FROM `orders` AS d
              WHERE META(d).id LIKE 'order:%'
              ORDER BY META().id LIMIT 5)
SELECT aval[0] AS min, aval[-1] AS max;

推荐阅读