根据查询的组合字段基于选择进行分组

时间:2020-09-23 15:12:40

标签: couchbase n1ql

所以,我有这些文件:

[
    { defaultName: "product X", brand: { name: "brand 00", id: "brand00-00" }, externalSpec: "spec00" },
    { defaultName: "product Y", brand: null, externalSpec: "spec01" },
    { defaultName: "product LL", brand: { name: "brand 01", id: "brand00-01" }, externalSpec: "spec00" },
    { defaultName: "product X", brand: { name: "brand 00", id: "brand00-00" }, externalSpec: "spec01" },
]

我正在通过此查询使用分组依据,并且通过文档上的现有字段可以正常工作:

SELECT ARRAY_AGG(p) FROM `BucketXXX` AS p
WHERE p.type = 'product'
AND p.deleted = false
GROUP BY p.defaultName

现在我想按查询使用我的分组,但是在select子句上使用连接字段,我需要使用它来检查乘积是否相等,例如:

    SELECT p.defaultName || p.brand.id || p.externalSpec AS custom_key, ARRAY_AGG(p) FROM `BucketXXX` AS p
    WHERE p.type = 'product'
    AND p.deleted = false
    GROUP BY custom_key

但没有运气,目前在AS附近出现错误3000语法错误,还请记住,品牌可能为null,如果要为null,则我想添加一个空字符串以继续externalSpec字段,

感谢您的帮助, 谢谢

1 个答案:

答案 0 :(得分:2)

投影别名只能在ORDER BY中使用。由于评估顺序(从,联接,删除,位置,分组依据,删除,投影,排序依据)。

支持CB 6.5或更高版本的GROUP BY别名

SELECT custom_key, ARRAY_AGG(p) FROM `BucketXXX` AS p
WHERE p.type = 'product'
AND p.deleted = false
GROUP BY p.defaultName || p.brand.id || p.externalSpec AS custom_key;

OR

SELECT custom_key, ARRAY_AGG(p) FROM `BucketXXX` AS p
LET custom_key = p.defaultName || p.brand.id || p.externalSpec
WHERE p.type = 'product'
AND p.deleted = false
GROUP BY custom_key;

您的品牌为空,如果需要,请使用CONCAT(p.defaultName,IFMISSINGORNULL(p.brand.id,“”),p.externalSpec)